[英]XSLT:Injecting values from one XML element into another XML element
我正在處理一個問題,想知道如何使用XSLT(1.0)來完成。 我已經將2個XML文件中的數據合並為一個文件。 我必須將值從一個XML節點注入到另一個。 由於我的XML文件很大,因此不必在XSLT中創建元素。 我只是想以某種方式將它們從一個data1元素映射到data2元素。
輸入:
<combinedData>
<data1>
<element1>
<id>12</id>
<name>Tony Green</name>
<address>Home Address</address>
</element1>
</data1>
<data2>
<element1>
<element2>
<element3>
<IdOfPerson></IdOfPerson>
<NameOfPerson></NameOfPerson>
<addressOfPerson></addressOfPerson>
</element3>
</element2>
</element1>
</data2>
所需輸出:
<data2>
<element1>
<element2>
<element3>
<IdOfPerson>12</IdOfPerson>
<NameOfPerson>Tony Green</NameOfPerson>
<addressOfPerson>Home Address</addressOfPerson>
</element3>
</element2>
</element1>
任何幫助,將不勝感激。
使用身份轉換來復制data2
:
<xsl:template match="/">
<xsl:apply-templates select="//data2"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"></xsl:apply-templates>
</xsl:copy>
</xsl:template>
為element3
的子節點使用特定的模板。 我假設您要從具有相同名稱data1/element1
的小寫節點復制數據:
<xsl:template match="element3/node()">
<xsl:variable name="name-without-of-person" select="substring-before(name(), 'OfPerson')" />
<xsl:variable name="lower-case" select="translate($name-without-of-person, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/>
<!-- copy the original node -->
<xsl:copy>
<!-- XSLT 1.0 does not support XPath queries that are dynamically generated,
therefore, .../element1/$lower-case does not work.
However, using a predicate with a name() query works -->
<xsl:value-of select="/combinedData/data1/element1/*[name()=$lower-case]"/>
</xsl:copy>
</xsl:template>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.