XPath 在 R 中的 XML 文档上失败
XPath fails on an XML document in R
我很乐意在使用 R 进行 XML 操作方面找到一些帮助。
我正在尝试对我的 XML/TEI 文件进行 XPath。这是它的结构:
<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<text>
<body>
<div>
<p>
<seg>
<name ref="Actr1235">Jen B.</name>frate M. <name ref="Actr1234">Léard B.</name> rhoncus orci quis luctus ultrices <note place="margin-left">1713 & 1714</note>, a été
vehicula cursus nunc, at sagittis lorem aliquet sed <name ref="Actr1236"> Jaes L.</name>
aeman graeca <name type="place">Digo</name> iaculis volutpat risu <name ref="Cole14">la
Charias</name>. M. <name ref="Actr1236">Laure</name> bibendum augue erat, fermentum semper. M. <name ref="Actr1235">B.</name> bibendum augue erat, fermentum semper
</seg>
</p>
</div>
</body>
</text>
</TEI>
我想提取 <name>
标签内以 "Actr" 开头的所有属性值。
我已经在 XML 编辑器 //tei:name/@ref[starts-with(., 'Actr')]
中尝试过这个 XPath,它正在工作。
现在,我正在尝试使用 R 将查询结果放入数据框中,使用 XML 包来解析文档
library(XML)
data1715<-xmlParse("My_document.xml")
name_query<-xpathSApply(data1715, "data(//tei:name/@ref[starts-with(., 'Actr')])", xmlValue)
它 returns 以下错误:
XPath error : Undefined namespace prefix xmlXPathCompOpEval: parameter
error XPath error : Invalid expression Erreur dans
xpathApply.XMLInternalDocument(doc, path, fun, ..., namespaces =
namespaces, : error evaluating xpath expression
data(//tei:name/@ref[starts-with(., 'Actr')])
在这种情况下,您如何定义名称空间?
XML
包不能很好地处理默认命名空间。在使用 xpath 样式表达式之前,您需要明确为命名空间分配名称。怎么样
xpathSApply(data1715,
"//tei:name/@ref[starts-with(.,'Actr')]",
unname,
namespaces=c(tei=getDefaultNamespace(data1715)[[1]]$uri))
请注意,我还删除了 data()
并更改了 xmlValue
。我不确定您尝试使用 data()
做什么,但我们在这里返回属性,而 xmlValue
似乎不喜欢使用属性。
我很乐意在使用 R 进行 XML 操作方面找到一些帮助。
我正在尝试对我的 XML/TEI 文件进行 XPath。这是它的结构:
<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<text>
<body>
<div>
<p>
<seg>
<name ref="Actr1235">Jen B.</name>frate M. <name ref="Actr1234">Léard B.</name> rhoncus orci quis luctus ultrices <note place="margin-left">1713 & 1714</note>, a été
vehicula cursus nunc, at sagittis lorem aliquet sed <name ref="Actr1236"> Jaes L.</name>
aeman graeca <name type="place">Digo</name> iaculis volutpat risu <name ref="Cole14">la
Charias</name>. M. <name ref="Actr1236">Laure</name> bibendum augue erat, fermentum semper. M. <name ref="Actr1235">B.</name> bibendum augue erat, fermentum semper
</seg>
</p>
</div>
</body>
</text>
</TEI>
我想提取 <name>
标签内以 "Actr" 开头的所有属性值。
我已经在 XML 编辑器 //tei:name/@ref[starts-with(., 'Actr')]
中尝试过这个 XPath,它正在工作。
现在,我正在尝试使用 R 将查询结果放入数据框中,使用 XML 包来解析文档
library(XML)
data1715<-xmlParse("My_document.xml")
name_query<-xpathSApply(data1715, "data(//tei:name/@ref[starts-with(., 'Actr')])", xmlValue)
它 returns 以下错误:
XPath error : Undefined namespace prefix xmlXPathCompOpEval: parameter error XPath error : Invalid expression Erreur dans xpathApply.XMLInternalDocument(doc, path, fun, ..., namespaces = namespaces, : error evaluating xpath expression data(//tei:name/@ref[starts-with(., 'Actr')])
在这种情况下,您如何定义名称空间?
XML
包不能很好地处理默认命名空间。在使用 xpath 样式表达式之前,您需要明确为命名空间分配名称。怎么样
xpathSApply(data1715,
"//tei:name/@ref[starts-with(.,'Actr')]",
unname,
namespaces=c(tei=getDefaultNamespace(data1715)[[1]]$uri))
请注意,我还删除了 data()
并更改了 xmlValue
。我不确定您尝试使用 data()
做什么,但我们在这里返回属性,而 xmlValue
似乎不喜欢使用属性。