2011-06-15 61 views
0

我想解析一個XML來吐出文件中包含的所有超鏈接。是否有捷徑可尋?它只需輸出一個只有鏈接的文件就可以。例如:從XML解析超鏈接的簡單方法

<POEM> 
<AUTHOR>Ogden Nash</AUTHOR> 
<TITLE>Fleas</TITLE> 
<LINE>Adam</LINE> 
<LINE>Had 'em.</LINE> 
<URL> 
<w:rStyle w:val="HyperLink"/> 
<w:t>https://www.ogdennash.com/</w:t> 
</w:r> 
</POEM> 

將是XML。我需要吐出一個文本文件:

https://www.ogdennash.com 

任何幫助,將不勝感激。

+0

您使用哪種語言/平臺進行分析?什麼庫? – Oded 2011-06-15 15:02:08

+0

還沒有決定。這就是我要求提出的建議。解析本身可能不會很困難,但是有沒有特定的庫(樹解析或線性解析?),這會使這更容易?我現在只是搞清楚DOM,SAX等。我完全不熟悉XML,所以很抱歉,如果這些都是愚蠢的問題。 至於語言,我想說Java,但它也很靈活。我可以用C做,但這可能會很難看。 Python會使這更容易嗎? 我不需要就可能的方法提供一些建議。 – 2011-06-15 23:55:55

+0

任何語言的任何XML庫都可以。任何XML解析器都將支持XPath,並允許您從XML中提取信息。 – Oded 2011-06-16 07:45:08

回答

0

道歉,如果你已經知道這一些,但你說你是新來的XML。

您將首先需要清理標記,因爲它不是嚴格XML。

例如標籤

<w:rStyle w:val="HyperLink"/> 

不具有定義的命名空間(W)

另外

....

<URL> 
    <w:rStyle w:val="HyperLink"/> 
    <w:t>https://www.ogdennash.com/</w:t> 
</w:r> 

....

不是好的MED welformed XML

應該

....

<URL> 
    <w:r> 
     <w:rStyle w:val="HyperLink"/> 
     <w:t>https://www.ogdennash.com/</w:t> 
    </w:r> 
</URL> 

....

如果您的文檔welformed並添加namespace,(我必然w ^到http://foo.bar)所以你的xml看起來像這樣

<POEM xmlns:w="http://foo.bar"> 
    <AUTHOR>Ogden Nash</AUTHOR> 
     <TITLE>Fleas</TITLE> 
     <LINE>Adam</LINE> 
     <LINE>Had 'em.</LINE> 
     <URL> 
      <w:r> 
       <w:rStyle w:val="HyperLink"/> 
       <w:t>https://www.ogdennash.com/</w:t> 
      </w:r> 
     </URL> 
</POEM> 

然後你可以用下面的XPath表達式

//寬:T /文()

選擇一個標籤內的所有超鏈接。然而,如果你想獲得URL標籤中的所有鏈接,你需要從URL獲得文本 - > w:r - > w:t - XPath是這樣的

// URL/w:r /女:T /文()

如果讓我用Java寫這個我會使用

JTIDY解決您的標記第一

一旦其固定的我會用JDOM(XML解析器)和Jaxen(XPath庫)來創建文本文件。

我可能可以爲您提供一個樣本類來做到這一點。

這不是一個真正的容易方式做到這一點,但它會工作。我希望它能給你一些指示。

+0

這正是我想要的。謝謝。 – 2011-06-22 16:05:27

+0

我忘了提及NekoHTML http://nekohtml.sourceforge.net/非常擅長清理標記,並且可以使用它來代替JTIDY。 – reevesy 2011-06-23 10:27:56