xslt复制子注释并添加额外的节点

时间:2018-04-23 19:31:22

标签: xslt xpath copy

对于以下xml:

<root>
    <employees>
        <employee>
            <Name>ABC</Name>
            <Dept>CS</Dept>
            <Designation>sse</Designation>
        </employee>
    </employees>
</root>

我使用这个xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <!-- Identity transform -->
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Name">
        <xsl:copy-of select="."/>
        <Age>34</Age>
    </xsl:template>

    <xsl:template match="Dept">
       <xsl:copy-of select="."/>
        <Domain>Insurance</Domain>
    </xsl:template>
</xsl:stylesheet>

我想实现以下输出

   <employee>
       <Name>ABC</Name>
       <Age>34</Age>
       <Dept>CS</Dept>
       <Domain>Insurance</Domain>
       <Designation>sse</Designation>
   </employee>

我不知道我将使用什么xpath将结果限制为仅限员工节点。

1 个答案:

答案 0 :(得分:0)

好吧,处理从/表示的文档节点(根节点)开始,因此如果你写了一个模板

<xsl:template match="/">
  <xsl:apply-templates select="//employee"/>
</xsl:template>

您只使用其余模板处理文档的任何employee个后代。

请参阅https://xsltfiddle.liberty-development.net/pPqsHT6了解上面建议的工作演示集成到您的样式表中,整个代码是

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:output 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="Name">
        <xsl:copy-of select="."/>
        <Age>34</Age>
    </xsl:template>

    <xsl:template match="Dept">
       <xsl:copy-of select="."/>
        <Domain>Insurance</Domain>
    </xsl:template>

    <xsl:template match="/">
      <xsl:apply-templates select="//employee"/>
    </xsl:template>

</xsl:stylesheet>