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 &amp; 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 似乎不喜欢使用属性。