2017-06-28 9 views
0

Ich versuche, Daten aus HTML-Dokument mit XML-Paket zu extrahieren. Ich gehe wie folgt vor:R-Extrahieren von Daten aus XMLNodeSet

library(XML) 
sink("parse.txt") 
parse<-htmlParse(file = "jdwaz.html",encoding = "GBK") 
a=getNodeSet(parse,'//div[@class="amount"]') 
print(a) 

dann Klasse (a) gibt "XMLNodeSet", dessen Inhalt wie folgt

[[1]] 
<div class="amount"> 
        <span>总额 ¥113.80</span> <br /><span class="ftx-13">在线支付</span> 
            </div> 

[[2]] 
<div class="amount"> 
        <span>总额 ¥99.00</span> <br /><span class="ftx-13">在线支付</span> 
            </div> 

nur in txt-Datei sieht zeige ich 2 von 20 von "a"

Klasse (a [1]) gibt "Liste" zurück Ich möchte den Inhalt "总额 ¥ 99.00" erhalten. fand ich eine Methode in r - xpathApply on XMLNodeSet (with XML package) Es verwendet xmlvalue Text zu erhalten wie:

x <- xpathApply(y, "//table/tr") 
sapply(x,xmlValue)   ## it a list of nodes.. 
" Test1.1 Test1.2 " " Test1.3 Test1.4 " 

aber nicht meine Situation passen. Als ich xmlvalue (a) eingeben, gibt sie:

Error in UseMethod("xmlValue") : no applicable method for 'xmlValue' applied to an object of class "XMLNodeSet" 

ich nicht geeignete Methode gefunden, mit XMLNodeSet-Klasse zu behandeln. HILFE!

+0

@Zelbinian Ich fand Sie Fragen gestellt, die auf meine Frage relevant ist, frage ich mich, ob Sie – listen

Antwort

0

Um einen XML-Knotensatz abzufragen, verwenden Sie einen führenden "." so ist es relativ zu dem aktuellen Knoten. Da Sie zwei Span-Tags haben, rufen Sie das ohne das Klassenattribut ab.

sapply(a, function(x) xpathSApply(x, ".//span[not(@class)]", xmlValue)) #OR 
sapply(a, xpathSApply, ".//span[not(@class)]", xmlValue) 
[1] "总额 ¥113.80" "总额 ¥99.00" 
+0

Dank viel kann mir helfen, ich benutze **/span/text() ** den Inhalt zwischen ein erhalten Paar Tags. jetzt habe ich eine neue Frage, ich verwende xmlGetAttr, um Inhalt in <> zum Beispiel, die Inhalt, den ich will, ist in ** Chinesisch **, dann gibt R den Inhalt in falschen Worten zurück. Ich denke, es ist wegen der Art der Codierung, aber es gibt keine relevante set inxmlGetAttr-Funktion. Traurig…. – listen

+0

Ich fand ** iconv ** -Funktion, es hilft bei der Codierung Problem! – listen