2013-12-20 74 views
0

我有这样的XML。删除指定的节点及其子节点

<a> 
    <b> 
    <c> 
     <e> 
     </e> 
    </c> 
    <d> 
    </d> 
    </b> 
    <b> 
    <c> 
     <e> 
     <e> 
    </c> 
    <d> 
    </d> 
    </b> 
</a> 

,我需要整个文件复制和删除所有<c>元素和他们的孩子。之后,我想将新文档存储到变量中。

这里是我想有改造后的XML:

<a> 
    <b> 
    <d> 
    </d> 
    </b> 
    <b> 
    <d> 
    </d> 
    </b> 
</a> 

而我目前有:

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

<xsl:template match="c"/> 
+0

如果这是你的所有样式表,那么它应该已经做你想要的。你能不能展示更多你的样式表和当前正在获取的输出(不仅仅是你输出的结果_want_),并解释它与你所期望的有什么不同? –

回答

0

两件事情我看是错的:

  • 你输入缺少您的第二个结束标记<e>元素
  • 您的XSLT脚本缺少标题

所以,你的输入改变以及形成的是这样的:

<a> 
    <b> 
    <c> 
     <e> 
     </e> 
    </c> 
    <d> 
    </d> 
    </b> 
    <b> 
    <c> 
     <e> 
     </e> 
    </c> 
    <d> 
    </d> 
    </b> 
</a> 

添加标题和xsl:stylesheet标记在你的样式表是这样的:

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

而且整件事情起作用,产生这样的输出:

<?xml version="1.0" encoding="UTF-8"?> 
<a> 
    <b> 
    <d> 
    </d> 
    </b> 
    <b> 
    <d> 
    </d> 
    </b> 
</a> 
+0

这是例子。所以我有一个标题和格式良好的文件。这不适合我。 – user2960708

+0

当然这是(固定的)例子。更多你没有提供的信息。然而,我在一个在线的XSLT测试器上测试了所有这些(只需将xml + xslt脚本粘贴到其中的一个,例如http://www.freeformatter.com/xsl-transformer.html或http://xslttest.appspot.com/)并检查结果。如果您遇到错误,请发布。如果您正在使用某个图书馆,请说出哪个图书馆,并且您可能会获得帮助。但是你发布的只有这两个问题。 – Matthias