2015-09-22 74 views
0

我需要在XML中保留少量值,並且需要通過XSLT添加新節點。通過XSL向現有節點添加新節點

值需要保留,需要添加新的選項。

如何實現這一點。以下是我的代碼。

XML

<?xml version="1.0" encoding="utf-8"?> 
<datas> 
    <data key="key1">  
    <value>a</value> 
    <options> 
     <option>a</option> 
     <option>b</option> 
     <option>c</option> 
    </options> 
    </data> 
    <data key="key2">  
    <value>z</value> 
    <options> 
     <option>x</option> 
     <option>y</option> 
     <option>z</option> 
    </options> 
    </data> 
</datas> 

XSLT

<?xml version="1.0" encoding="utf-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml"/> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="datas"> 
    <datas> 
     <data key="key1">   
     <value> 
      <xsl:value-of select="/datas/data[key = 'key1']/value" /> 
     </value> 
     <options> 
      <option>a</option> 
      <option>b</option> 
      <option>c</option> 
      <option>d</option> 
     </options> 
     </data> 
     <data key="key2">  
     <value> 
      <xsl:value-of select="/datas/data[key = 'key2']/value" /> 
     </value> 
     <options> 
      <option>x</option> 
      <option>y</option> 
      <option>z</option> 
     </options> 
     </data> 
    </datas>  
    </xsl:template> 
</xsl:stylesheet> 

<option>d</option>是沒有得到補充。

有人可以幫忙嗎?

由於

回答

0
  1. 代替:

    <xsl:value-of select="/datas/data[key = 'key1']/value" /> 
    

    需要:

    <xsl:value-of select="/datas/data[@key = 'key1']/value" /> 
    

  • <option>d</option>未被添加。

    我不能重現該問題,使用您的代碼: http://xsltransform.net/94rmq5E


  • 你會犯這樣的簡單得多:

    XSLT 1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    
    <!-- identity transform --> 
    <xsl:template match="@*|node()"> 
        <xsl:copy> 
         <xsl:apply-templates select="@*|node()"/> 
        </xsl:copy> 
    </xsl:template> 
    
    <xsl:template match="data[@key='key1']/options"> 
        <xsl:copy> 
         <xsl:apply-templates select="@*|node()"/> 
         <option>d</option> 
        </xsl:copy> 
    </xsl:template> 
    
    </xsl:stylesheet> 
    
  • +0

    對不起,這是錯字錯誤,我糾正了問題。我的問題是如何現在添加新選項。 – Badrinarayana

    +0

    @ user007有什麼新的選擇?請修改您的問題並向我們展示預期結果。 –

    +0

    更新了問題 – Badrinarayana