2016-04-30 56 views
0

的CDATA部分替換實體我有這樣的XML文件:R:在XML

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

我需要提取使用R包在CDATA的信息,這意味着我想

First line.\nSecond line. 

所以我試了XML包:

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

那麼我被困在這第一步,因爲replaceEntities選項似乎並沒有在這裏工作,我仍然在解析文本中得到&amp;#10;

任何人都可以告訴我如何從這個XML中提取正確的文本?

回答

0

我無法獲得replaceEntities,所以你可以使用gsub。

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

此外,添加xmlParse選項= NOENT或replaceEntities = TRUE不會更改以下任何結果。我總是在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;"