【问题标题】:R: Replace Entities in CDATA section of XMLR:替换 XML 的 CDATA 部分中的实体
【发布时间】:2016-05-03 01:12:51
【问题描述】:

我有一个这样的 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;amp;#10;

谁能告诉我如何从这个 XML 中提取正确的文本?

【问题讨论】:

    标签: xml r


    【解决方案1】:

    我也无法让replaceEntities 工作,所以你可以使用 gsub。

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

    此外,添加 xmlParse options=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;"
    

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 1970-01-01
      • 2014-03-02
      • 2014-09-07
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      相关资源
      最近更新 更多