使用XSLT复制根标记结束后的注释

时间:2013-07-31 12:07:03

标签: xslt

我有一个需要重新排序并存储在另一个文件中的XML。我做了一个xslt,它工作正常。 但是,如果xml结束后有注释,则不会复制这些注释。我需要一个xslt语句来复制存在的注释 根标签结束后 以下是解释以下内容的代码

原始XML

    <Company>
      <Employee id="100" Name="John" >
        <Salary value="15000"/>
        <Qualification text="Engineering">
        <State name="Kerala" code="02">
        <Background text="Indian">
      </Employee>
    </Company>

<!--This file contains Employee information-->
<!--Please refer the file to get information about an employee-->

XSLT转换代码

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output indent="yes"  omit-xml-declaration="yes" method="xml" />
  <xsl:strip-space elements="*"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Employee">
    <xsl:copy>
      <xsl:apply-templates select="Qualification"/>
      <xsl:apply-templates select="Salary" />
      <xsl:apply-templates select="Background"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

获得的输出

<?xml version="1.0" encoding="utf-8"?>
<Company>
  <Employee>
    <Qualification text="Engineering" />
    <Salary value="15000" />
    <Background text="Indian" />
  </Employee>
</Company>

需要输出

<?xml version="1.0" encoding="utf-8"?>
<Company>
  <Employee>
    <Qualification text="Engineering" />
    <Salary value="15000" />
    <Background text="Indian" />
   </Employee>
</Company>

<!--This file contains Employee information-->
<!--Please refer the file to get information about an employee-->

1 个答案:

答案 0 :(得分:0)

你的转型没有错。我使用xsltproc在相同的XML上运行相同的XSLT(使其格式正确)并获得正确的输出,包括尾随注释(尽管它们因{{1}而丢失了原始缩进和间距和样式表中的strip-space

indent="yes"

看起来您正在使用的任何处理器或XML解析器(可能是由<Company> <Employee> <Qualification text="Engineering"/> <Salary value="15000"/> <Background text="Indian"/> </Employee> </Company><!--This file contains Employee information--> <!--Please refer the file to get information about an employee--> 判断的Microsoft)都会忽略文档元素结束标记之后的注释。