簡體   English   中英

XSLT:將值從一個XML元素注入到另一個XML元素

[英]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.

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