2011-09-06 95 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 –