2011-09-06 62 views
2

移除标签我有这个XML文件:XSLT用于从XML文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<results> 
    <output> 
    <status>OK</status> 
    <usage>Please use it</usage> 
    <url/> 
    <language>english</language> 
    <category>science_technology</category> 
    <score>0.838661</score> 
    </output> 
</results> 

我想从这个XML删除标记<output> </output>

总产值有望

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<results> 
<status>OK</status> 
    <usage>Please use it</usage> 
    <url/> 
    <language>english</language> 
    <category>science_technology</category> 
    <score>0.838661</score> 

</results> 

我怎样才能做到这一点?

+1

显示你想要的确切输出,否则我们只是猜测。 –

+1

完成..谢谢!! –

+0

好问题,+1。基于最基本和最强大的XSLT设计模式 - 重写身份规则,查看我的答案,获得完整,简短和轻松的解决方案。 –

回答

2

最短的可能:

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

    <xsl:template match="results"> 
    <xsl:copy> 
     <xsl:copy-of select="output/*"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

或使用身份规则:

<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="results"> 
     <xsl:copy> 
      <xsl:apply-templates select="output/*"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

它的工作非常感谢..! –

4

最简单的方式做到这一点(几乎是机械和不假思索):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="output"><xsl:apply-templates/></xsl:template> 
</xsl:stylesheet> 

当这个转换是一个pplied所提供的XML文档

<results> 
    <output> 
    <status>OK</status> 
    <usage>Please use it</usage> 
    <url/> 
    <language>english</language> 
    <category>science_technology</category> 
    <score>0.838661</score> 
    </output> 
</results> 

想要的,正确的结果产生

<results> 
    <status>OK</status> 
    <usage>Please use it</usage> 
    <url/> 
    <language>english</language> 
    <category>science_technology</category> 
    <score>0.838661</score> 
</results> 

说明

  1. 身份规则/模板拷贝每个节点“如同” 。

  2. 有一个模板覆盖身份规则。它匹配任何output元素,并防止将其复制到输出中,但会继续处理其任何子元素。

记住:重写身份规则是最基本的和最强大的XSLT设计模式。

+0

非常感谢您的详细解释。它的工作。我想了解更多关于XLST。有什么我可以参考的链接了解它,因为我有各种XML文件,我需要从中获取数据.. –

+2

@ aniket69:在SO表达感谢的既定方式是接受最佳答案 - 通过单击在旁边的复选标记处。我很高兴我的回答很有用。是的,XSLT是美丽,强大和优雅。请参阅此链接到书籍和教程:http://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book-blog-site-online/341589#341589 –