R 中的 XML(TEI 文档)解析:如何仅提取头部?

问题描述 投票:0回答:1

我必须解析与此类似的 XML-TEI 文档:

<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader> ... </teiHeader>
<text>
 <body>
  <head rend="Body A">DOCUMENT_TITLE</head>
    <div rend="entry">
    <head rend="time">TIME_INFORMATION</head>
    <p rend="Body A"> INFORMATION A</p>
    <p rend="content">
        <hi rend="italic"> CONTENT </hi>
            </p>
    </div>

我想提取 TIME_INFORMATION 字符串。有人可以给一些建议吗?

我可以使用命令轻松获取内容

doc <- htmlParse(paste0(mypath,xml_path))
content<-unlist(xpathSApply(doc,'//p[@rend="content"]//hi[@rend="italic"]',xmlValue))

但是我怎样才能只提取TIME_INFORMATION呢?我试过了

doc <- htmlParse(paste0(mypath,xml_path))
content<-unlist(xpathSApply(doc,'//div//head[@rend="time"]',xmlValue))

但我得到一个空列表。 我发现的唯一方法是获取每个条目“div”的整体并使用正则表达式解析日期,但我想避免这种情况。

无论如何,这样做时我注意到当我跑步时:

div <- getNodeSet(doc2, '//div')

我获得的原始 XML 结构略有不同,似乎标签消失了。例如,

div[1]
是:

> div[1]
[[1]]
<div rend="entry">
        London, June 19th, 1854.
        <p rend="Body A">Oxford, University Archive </p>
        <p rend="content">
            <hi rend="italic"> CONTENT </hi></p>
    </div> 
r xpath xml-parsing tei
1个回答
0
投票

使用从问题中提取的

Lines
并在最后的注释中显示

library(XML)
doc <- htmlTreeParse(Lines, asText = TRUE, useInternalNodes = TRUE)
xpathSApply(doc, '//div[@rend="entry"]/text()[1]', xmlValue) |> trimws()
## [1] "TIME_INFORMATION"

注意

Lines <- '<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader> ... </teiHeader>
<text>
 <body>
  <head rend="Body A">DOCUMENT_TITLE</head>
    <div rend="entry">
    <head rend="time">TIME_INFORMATION</head>
    <p rend="Body A"> INFORMATION A</p>
    <p rend="content">
        <hi rend="italic"> CONTENT </hi>
            </p>
    </div>
'
© www.soinside.com 2019 - 2024. All rights reserved.