2012-05-15 67 views
4

我有一個很大的XML文件我想去掉所有的標籤並只保留節點值。我希望每個節點的值都在一個單獨的行中。我怎樣才能做到這一點?從XML文件中去除所有標籤

我可以使用免費軟件來做它或使用PHP或ASP.NET代碼。我也查看了XSLT選項。 RegEX可能太多了。我探討了PHP選項,看着simplexml_load_file(),strip_tags(),get_file_contents()但失敗。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- a comment --> 
<catalog> 
    <cd> 
     <title>Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
     <company>Columbia</company> 
     <price>10.90</price> 
       <address> 
         <city>Melbourne </city> 
         <zip>01803 </zip> 
       </address> 
     <year>1985</year> 
    </cd> 
    <cd> 
     <title>Hide your heart</title> 
     <artist>Bonnie Tyler</artist> 
     <country>UK</country> 
     <company>CBS Records</company> 
     <price>9.90</price> 
     <year>1988</year> 
    </cd> 

</catalog> 

編輯:這是我試過了,等等。

<?php 

$xml = simplexml_load_file('myxml.xml'); 
echo strip_tags($xml); 

?> 
+0

'用strip_tags()'應該工作。你能發佈你如何使用它? –

+0

我覺得這個問題sortof導致如何解析標籤的其他問題http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags - 所有我會說是小心。 – Kristian

+0

@ConnorPeet爲'strip_tags'添加了代碼段。我沒有得到任何輸出,因爲$ xml基本上是一個數組 –

回答

5

這應該做雅:

<?php 
$xml = file_get_contents('myxml.xml'); 
$xml = nl2br($xml); 
echo strip_tags($xml,"<br>"); 
?> 

你失蹤換行符的原因是因爲在XML,它被保存爲純文本換行\n而作爲HTML顯示時,必須有明確的<br>換行符。正因爲如此,好的PHP人員爲您提供了一個方便的功能,稱爲nl2br()

+0

BTW I希望有一個代碼,我可以操縱每一行。我需要在節點前添加一些事情,然後添加一些內容。 –

4

下面是一個簡短和簡單的XSLT溶液

<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="text()"> 
    <br /><xsl:value-of select="concat(.,'&#xA;')"/> 
</xsl:template> 
</xsl:stylesheet> 

當這個變換所提供的XML文檔(將在工作任何 XML文檔)施加:

<catalog> 
    <cd> 
     <title>Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
     <company>Columbia</company> 
     <price>10.90</price> 
     <address> 
      <city>Melbourne </city> 
      <zip>01803 </zip> 
     </address> 
     <year>1985</year> 
    </cd> 
    <cd> 
     <title>Hide your heart</title> 
     <artist>Bonnie Tyler</artist> 
     <country>UK</country> 
     <company>CBS Records</company> 
     <price>9.90</price> 
     <year>1988</year> 
    </cd> 
</catalog> 

想要的結果是:

<br/>Empire Burlesque 
<br/>Bob Dylan 
<br/>USA 
<br/>Columbia 
<br/>10.90 
<br/>Melbourne 
<br/>01803 
<br/>1985 
<br/>Hide your heart 
<br/>Bonnie Tyler 
<br/>UK 
<br/>CBS Records 
<br/>9.90 
<br/>1988 

,它是由瀏覽器顯示爲:


帝國滑稽
鮑勃·迪倫
美國
哥倫比亞
10.90
墨爾本
隱藏你的心臟
健美的Tyler
英國
CBS唱片
9.90
1988年

+0

謝謝!這也會幫助我。我正在尋找任何東西,只是想剝離標籤。 –

+0

@ Thecrocodilehunter:不客氣。 –