2016-04-30 5 views
0

Ich habe eine XML-Datei wie folgt:R: Ersetzen Entities in CDATA-Abschnitt von XML

<TextBody> 
    <![CDATA[First line.&amp;#10;Second line.]]> 
</TextBody> 

Ich brauche die Informationen in CDATA mit R Paket zu extrahieren, was bedeutet, dass ich

will
First line.\nSecond line. 

so habe ich versucht, XML Paket:

xmlParse("<TextBody><![CDATA[First line.&amp;#10;Second line.]]></TextBody>", 
     replaceEntities=TRUE) 

Dann Ich bin bei diesem ersten Schritt fest, weil replaceEntities Option scheint hier nicht zu funktionieren, ich bekomme immer noch &amp;#10; in den geparsten Text.

Jeder kann mir zeigen, wie man den richtigen Text aus diesem XML extrahiert?

Antwort

0

Ich kann replaceEntities nicht funktionieren, so dass Sie gsub verwenden könnten.

xpathSApply(doc, "//TextBody", function(x) gsub("&amp;#10;", "\n", xmlValue(x))) 
[1] "First line.\nSecond line." 

Auch das Hinzufügen XMLPARSE Optionen = NOENT oder replaceEntities = TRUE ändert sich nicht, einen der unten stehenden Ergebnisse. Ich bekomme immer Entity-Referenzen in CDATA.

doc <- xmlParse("<a>test &quot; &apos; &lt; &gt; &amp;</a>") 
xpathSApply(doc, "//a", xmlValue) 
[1] "test \" ' < > &" 

doc <- xmlParse("<a><![CDATA[test &quot; &apos; &lt; &gt; &amp;]]></a>") 
xpathSApply(doc, "//a", xmlValue) 
[1] "test &quot; &apos; &lt; &gt; &amp;"