首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用R中的"xml2“解析包含特殊字符的标签

使用R中的"xml2“解析包含特殊字符的标签
EN

Stack Overflow用户
提问于 2017-03-27 21:25:41
回答 3查看 298关注 0票数 0

我正在使用R中的xml2包来解析我的xml文件。除了这个在标签名称中有一个破折号的标签之外,所有的东西都工作得很好。

XML示例:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<abstracts-retrieval-response xmlns="http://www.elsevier.com/xml/svapi/abstract/dtd" xmlns:ait="http://www.elsevier.com/xml/ani/ait" xmlns:ce="http://www.elsevier.com/xml/ani/common" xmlns:cto="http://www.elsevier.com/xml/cto/dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:prism="http://prismstandard.org/namespaces/basic/2.0/" xmlns:xocs="http://www.elsevier.com/xml/xocs/dtd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <coredata>
    <prism:url>http://api.elsevier.com/content/abstract/scopus_id/85011891272</prism:url>
    <dc:identifier>SCOPUS_ID:85011891272</dc:identifier>
    <eid>2-s2.0-85011891272</eid>
    <prism:doi>10.1186/s13638-017-0812-8</prism:doi>
    <article-number>29</article-number>
    <dc:title>Performance of emerging multi-carrier waveforms for 5G asynchronous communications</dc:title>
    <prism:aggregationType>Journal</prism:aggregationType>
    <srctype>j</srctype>
    <citedby-count>0</citedby-count>
    <prism:publicationName>Eurasip Journal on Wireless Communications and Networking</prism:publicationName>
    <dc:publisher> Springer International Publishing </dc:publisher>
    <source-id>18202</source-id>
    <prism:issn>16871499</prism:issn>
    <prism:volume>2017</prism:volume>
    <prism:issueIdentifier>1</prism:issueIdentifier>
    <prism:coverDate>2017-12-01</prism:coverDate>
 </coredata>
</abstracts-retrieval-response>

我使用下面这行代码提取prism:doi节点中的文本(按预期工作):

代码语言:javascript
运行
复制
xml2::xml_text(xml2::xml_find_first(intermediateXML,"//prism:doi"))

但是,提取"citedby-count“的值的代码返回的是"NA”,而不是实际值。

代码语言:javascript
运行
复制
xml2::xml_text(xml2::xml_find_first(intermediateXML,"//citedby-count"))

我的猜测是,解析器与标记中的"-“混淆了。有办法避免这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2017-03-27 21:43:46

你有没有试过更新xml2?在我的使用xml2 1.1.1版本的苹果电脑上,它可以工作:

代码语言:javascript
运行
复制
doc <- read_xml(txt) %>% 
  xml_find_first("/coredata")

doc %>% xml_find_first("citedby-count") %>% xml_text # "0"
doc %>% xml_find_first("//citedby-count") %>% xml_text # "0"

如果这不起作用,您可以尝试将NS指定为

代码语言:javascript
运行
复制
doc %>% xml_find_first("citedby-count", ns = character()) %>% xml_text

数据和包

代码语言:javascript
运行
复制
require(xml2)
require(magrittr)
txt <- '<coredata>
    <prism:url>http://api.elsevier.com/content/abstract/scopus_id/85011891272</prism:url>
<dc:identifier>SCOPUS_ID:85011891272</dc:identifier>
<eid>2-s2.0-85011891272</eid>
<prism:doi>10.1186/s13638-017-0812-8</prism:doi>
<article-number>29</article-number>
<dc:title>Performance of emerging multi-carrier waveforms for 5G asynchronous communications</dc:title>
<prism:aggregationType>Journal</prism:aggregationType>
<srctype>j</srctype>
<citedby-count>0</citedby-count>
<prism:publicationName>Eurasip Journal on Wireless Communications and Networking</prism:publicationName>
<dc:publisher> Springer International Publishing </dc:publisher>
<source-id>18202</source-id>
<prism:issn>16871499</prism:issn>
<prism:volume>2017</prism:volume>
<prism:issueIdentifier>1</prism:issueIdentifier>
<prism:coverDate>2017-12-01</prism:coverDate></coredata>'
票数 0
EN

Stack Overflow用户

发布于 2017-03-28 21:02:59

我不能用我想要的方法解决这个问题。最后,我通过使用xml2::as_list函数并通过

代码语言:javascript
运行
复制
intermediateXML <- xml2::read_xml(serverResponse)
listXML <- xml2::as_list(intermediateXML)

listXML$coredata$`citedby-count`[[1]]

非常感谢@Floo0

票数 0
EN

Stack Overflow用户

发布于 2017-08-24 07:58:13

在这个场景中来得很晚。这是我发现的一个解决方案,可能对其他人有帮助:

代码语言:javascript
运行
复制
doc %>% xml_find_all( "//*[name()='my-dash-tag']" )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43047757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档