XSLT:为其添加新标签和值

时间:2016-03-17 14:27:44

标签: xml xslt

我正在尝试在XSLT中添加带有值的新字段。我发现以下链接很有用,但我只能添加一个字段和值。我想为它添加多个字段和值。

供参考:XSLT: If tag exists, apply template; if not, choose static value

输入:

 <root>
     <item>
        <country>Brobdingnag</country>
      </item>
    <item>
        <test/>
     </item>
 </root>

XSLT:

      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org 1999/XSL/Transform">
         <xsl:template match="node()|@*">
           <xsl:copy>
           <xsl:apply-templates select="node()|@*"/>
           </xsl:copy>
        </xsl:template>
       <xsl:template match="item[not(country)]">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
            <country>Lilliput</country>
        </xsl:copy>
       </xsl:template>
     </xsl:stylesheet>

输出:

  <root>
     <item>
         <country>Brobdingnag</country>
     </item>
     <item>
        <test></test>
        <country>Lilliput</country>
    </item>
 </root>

同样的方式我需要添加多个字段..任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了questin,你只需要一个额外的条件。

输入

var settings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
var reader = System.Xml.XmlTextReader.Create("C:\\Users\\ADMIN\\Pictures\\test.xml", settings);

XSLT

<root>
  <item>
    <country>Brobdingnag</country>
    <state>State of Fiction</state>
  </item>
  <item>
    <test/>
  </item>
</root>

输出

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="item[not(country) and not(state)]">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
        <country>Lilliput</country>
      </xsl:copy>
    </xsl:template>
 </xsl:stylesheet>

答案 1 :(得分:0)

它以这种方式工作..

输入:

<root>
    <item>
        <country>Brobdingnag</country>
    </item>
    <item>
        <test/>
    </item>
</root>

XSLT:

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org 1999/XSL/Transform">
     <xsl:template match="node()|@*">
       <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
       </xsl:copy>
    </xsl:template>
   <xsl:template match="item[not(country) and not(State)]">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
        <country>Lilliput</country>
        <state>State of Fiction</state>
    </xsl:copy>
   </xsl:template>
 </xsl:stylesheet>

输出:

 <root>
    <item>
        <country>Brobdingnag</country>
    </item>
    <item>
       <test></test>
       <country>Lilliput</country>
       <state>State of Fiction</state>
   </item>
 </root>