解析包含带“quot”的特殊字符的标记;xml2";在R
我在R中使用xml2包来解析我的xml文件。除了这一个标签外,所有的功能都很完美,标签名中有一个破折号 XML示例:解析包含带“quot”的特殊字符的标记;xml2";在R,r,xml,special-characters,hyphenation,xml2,R,Xml,Special Characters,Hyphenation,Xml2,我在R中使用xml2包来解析我的xml文件。除了这一个标签外,所有的功能都很完美,标签名中有一个破折号 XML示例: <?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="
<?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>
但是,提取“citedby count”值的代码返回“NA”而不是实际值
xml2::xml_text(xml2::xml_find_first(intermediateXML,"//citedby-count"))
我的猜测是,解析器与标记中的“-”混淆了。是否有其他方法可以避免此问题?是否尝试更新
xml2
?在使用xml2 1.1.1版的Mac上,它可以工作:
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"
数据和包
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>'
require(xml2)
需要(magrittr)
txt我无法按预期的方式解决问题。最后,我通过使用xml2::as_list函数并通过
intermediateXML <- xml2::read_xml(serverResponse)
listXML <- xml2::as_list(intermediateXML)
listXML$coredata$`citedby-count`[[1]]
intermediateXML在这个场景中迟到了。以下是我发现的一个可能对其他人有帮助的解决方案:
doc %>% xml_find_all( "//*[name()='my-dash-tag']" )
如果我加载您的示例代码,它将非常有效。我也在使用最新版本的软件包。但是,该代码不适用于真正的实时服务器响应。我会让你了解最新情况。
intermediateXML <- xml2::read_xml(serverResponse)
listXML <- xml2::as_list(intermediateXML)
listXML$coredata$`citedby-count`[[1]]
doc %>% xml_find_all( "//*[name()='my-dash-tag']" )