2012-10-03 39 views
2
<DOC NUMBER=1> 
<DOCFULL> --> 
<br><div class="c0"> 
<p class="c1"><span class="c2">Dokument 1 von 3</span></p> 
</div> 
<br><div class="c0"> 
<br><p class="c1"><span class="c2">Associated Press Financial Wire</span></p> 
</div> 
<br><div class="c3"> 
<p class="c1"><span class="c2">April 25, 2012 Wednesday 9:18 PM GMT </span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c6">Apple CEO Tim Cook emerges from Steve Jobs' shadow</span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c7">BYLINE: </span><span class="c2">By PETER SVENSSON, AP Technology Writer</span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c7">SECTION: </span><span class="c2">BUSINESS NEWS</span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c7">LENGTH: </span><span class="c2">794 words</span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c7">DATELINE: </span><span class="c2">NEW YORK </span></p> 
</div> 
<br><div class="c4"> 
<p class="c8"><span class="c2"> MAIN TEXT 1</span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c7">LOAD-DATE: </span><span class="c2">April 26, 2012</span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c7">LANGUAGE: </span><span class="c2">ENGLISH</span></p> 
</div> 
<br><div class="c4"> 
<p class="c5"><span class="c7">PUBLICATION-TYPE: </span><span class="c2">Newswire</span></p> 
</div> 
<br><div class="c0"> 
<br><p class="c1"><span class="c2">Copyright 2012 Associated Press<br>All Rights Reserved</span></p> 
</div> 
<!-- Hide XML section from browser 
</DOCFULL> 
</DOC> --> 

我是xpath的新手,我想將它與R(Duncan Lang的xml包)結合使用來查詢我從LexisNexis收到的html文檔。該文檔包含多個新聞文章,每篇文章都以<DOC NUMBER=1> <DOCFULL>標籤爲邊界。我希望爲每個文檔提取一些信息,例如提取部分的信息,我能走到今天:xpath表達式不起作用

doc <- htmlParse("hmtldoc.HTML") 
xpathSApply(doc,"//span[text()='SECTION: ']/..", xmlValue) 

這給了我:

[1] "SECTION: BUSINESS NEWS" "SECTION: BUSINESS NEWS" "SECTION: BUSINESS NEWS" 

即輸出我可以工作。主要問題是不是每篇文章都有SECTION信息。我需要知道的是哪篇文章提供了這些信息,哪些不能,最好是通過返回NA或空列表元素,這樣我就可以自己推斷出這些信息。

與此相關的問題:我試着拿出我第一次選擇的無論是DOC或DOCFULL節點,並從那裏去了一個解決方案,例如:

xpathSApply(doc,"//DOCFULL/*/span[text()='SECTION: ']/..", xmlValue) 

我想這應該返回相同的文字如上所述,但事實並非如此。無論如何,我對這種語言仍然很陌生,並感謝任何幫助。

+0

有兩個問題與此問題:1. XML文檔格式不正確嚴重 - 每一個兼容的XML解析器會引發錯誤在上面。 2.你不指定你想要選擇的節點。 –

回答

1

因爲有不止一個DOCFULLspan S之間後代元素的「等級」,你要麼需要

含糊

//DOCFULL//*/span[text()='SECTION: ']/.. 

或者 具體化有關水平(div和p)

//DOCFULL/*/*/span[text()='SECTION: ']/.. 
+0

感謝您的回覆。我用你的路徑,但它仍然返回一個空的列表。我認爲這與DOC和DOCFULL節點有關。例如,'xpathSApply(doc,「// DOC」,xmlAttrs)'不會返回NUMBER。所以我認爲在解析過程中必須有一個錯誤。 – crubba

0

按照給定的文檔,你可以只使用這樣的:

//*[span='SECTION: '] 

你並不需要指定找到的文本跨度節點「部分:」,然後選擇它的父,你只需要選擇任何具有該文本的「span」子節點的節點。

如果你需要它是一個DOCFULL元素的後代,然後用

//DOCFULL//*[span='SECTION: ']