簡體   English   中英

如何使用XSL編輯XML?

[英]How to edit XML with XSL?

我正在用Java編寫一個虛擬的“ MyAgenda”應用程序,該應用程序必須允許維護存儲數據的XML文件。

假設我有一個XML文件,例如:

<myagenda>
  <contact>
    <name>Matthew Blake</name>
    <phone>12345678</phone>
  </contact>
</myagenda>

如何使用XSLT添加新的<contact>

謝謝。

身份轉換開始,該轉換將任何XML文檔轉換為自身。

身份轉換是一台簡單的機器:給定一棵樹,它以遞歸方式復制找到的每個節點。 您將覆蓋一個特定節點( myagenda元素)的行為,它將以另一種方式復制它。

為此,添加一個與您要更新的元素匹配的模板並將其復制。 在您的情況下:

<xsl:template match="myagenda">
  <xsl:copy-of select=".">
     <xsl:apply-templates select="node() | @*"/>
  </xsl:copy-of>
</xsl:template>

您可能會想,“等等,這不是身份轉換嗎?” 是的,但是不會一直這樣。

現在,決定如何將新的聯系信息添加到轉換中。 基本上有兩種方法:使用document函數從單獨的XML文檔中讀取它,或使用參數將值傳遞到轉換中。 假設您正在使用參數; 在這種情況下,請將以下內容添加到XSLT的頂部( xsl:output元素之后):

<xsl:param name="contactName"/>
<xsl:param name="contactPhone"/>

現在,您不想將myagenda轉換為自身的副本,而是希望將其轉換為其中具有新contact的自身的副本。 因此,修改模板即可:

<xsl:template match="myagenda">
  <xsl:copy-of select=".">
     <xsl:apply-templates select="node() | @*"/>
     <contact>
        <name><xsl:value-of select="$contactName"/></name>
        <phone><xsl:value-of select="$contactPhone"/></phone>
     </contact>
  </xsl:copy-of>
</xsl:template>

如果要從文件系統中的單獨XML文檔中獲取名稱和電話,則可以使用以下方法啟動XSLT:

<xsl:variable name="contact" value="document('contact.xml')"/>
<xsl:variable name="contactName" value="$contact/*/name[1]'/>
<xsl:variable name="contactPhone" value=$contact/*/phone[1]'>

contact.xml讀取contact.xml並在頂級元素下找到namephone元素(在模式中使用*表示您不必關心頂級元素的名稱是什么)。

使用xsl:param作為xsl樣式表標題中的全局參數。

<xsl:param name="newname"/>
<xsl:param name="newphone"/>

用您的xslt引擎填充新參數,然后通過模板添加新項目:

(...)
<xsl:template match="myagenda">

<xsl:apply-templates select="contact"/>

<xsl:if test="string-length($newname)&gt;0">
 <xsl:element name="contact">
  <xsl:element name="name">
    <xsl:value-of select="$newname"/>
  </xsl:element>
  <xsl:element name="phone">
    <xsl:value-of select="$newphone"/>
  </xsl:element>
 </xsl:element>
</xsl:if>
</xsl:template>
(...)

XSLT將1個xml文件轉換為另一個xml或文本文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM