Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT复制根标记末尾之后的注释_Xslt - Fatal编程技术网

使用XSLT复制根标记末尾之后的注释

使用XSLT复制根标记末尾之后的注释,xslt,Xslt,我有一个XML,需要重新排序并存储在另一个文件中。我已经为此做了一个xslt,它工作得很好。 但是,如果xml结束后有注释,则不会复制这些注释。我需要一个xslt语句来复制当前的注释 在根标记结束之后 下面是解释以下内容的代码 原始XML <Company> <Employee id="100" Name="John" > <Salary value="15000"/> <Qualification t

我有一个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-->

所需输出

<?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-->

您的转换没有问题。我使用在相同的XML上运行了相同的XSLT(进行了更正以使其格式良好),并获得了正确的输出,包括尾随注释(尽管由于样式表中的
带空格和
indent=“yes”
,它们丢失了原始的缩进和间距)



看起来您使用的任何处理器或XML解析器(根据
xmlns:msxsl=“urn:schemas Microsoft com:xslt”
)都忽略了文档元素结束标记后的注释。

@StanleyDeBoer,我已经从命令行尝试了Saxon 6.5.5和9.5,使用经过更正的输入作为您的输入格式甚至不好,根元素后的注释由Saxon复制。如果您仍然有问题,请编辑您的问题,提供格式良好的输入XML、Saxon的确切版本以及您使用它的确切方式(例如,命令行或Java代码)。我没有问这个问题,我只是在说明我在OxygenXml中得到的结果。我现在就开始工作了。。。。我的xslt非常大而且复杂,为了使它更简单,我只在这里粘贴了它的一部分。。但是我没有粘贴实际问题。。。这一行实际上是超出注释的代码。我删除了这段代码并使其正常工作。。谢谢大家…@MJC如果您使用的是基于的内容,那么最简单的修复方法是删除
,并将
改为
(即对文档根节点应用与元素节点相同的逻辑)。如果您只是删除现有的根模板,但不编辑
*
模板,那么是的,您将在根之后拾取注释,但您也会发现根之前的注释出现两次。@Ian。。是的,你完全正确!!。。。我注意到在根节点之前有加倍的注释,并且几乎按照您在注释中建议的方式处理它。无论如何,非常感谢所有的建议。