xml2 包 (R) 中的 xml_find_all 函数未找到相关节点

2024-05-09

我使用 R 中的 xml2 包来访问 xml 数据,发现它在不同的 xml_documents 上表现不同。

在这个宠物的例子中

library(xml2)
doc <- read_xml( "<MEMBERS>
                      <CUSTOMER>
                         <ID>178</ID>
                         <FIRST.NAME>Alvaro</FIRST.NAME>
                         <LAST.NAME>Juarez</LAST.NAME>
                         <ADDRESS>123 Park Ave</ADDRESS>
                         <ZIP>57701</ZIP>
                      </CUSTOMER>
                      <CUSTOMER>
                         <ID>934</ID>
                         <FIRST.NAME>Janette</FIRST.NAME>
                         <LAST.NAME>Johnson</LAST.NAME>
                         <ADDRESS>456 Candy Ln</ADDRESS>
                         <ZIP>57701</ZIP>
                      </CUSTOMER>  
                   </MEMBERS>")
doc
{xml_document}
<MEMBERS>
[1] <CUSTOMER>\n  <ID>178</ID>\n  <FIRST.NAME>Alvaro</FIRST.NAME>\n  <LAST.NAME>Juarez</LAST.NAME>\n  <ADDRESS>12 ...
[2] <CUSTOMER>\n  <ID>934</ID>\n  <FIRST.NAME>Janette</FIRST.NAME>\n  <LAST.NAME>Johnson</LAST.NAME>\n  <ADDRESS> ...

我可以运行以下代码

xml_find_all(doc, "//FIRST.NAME")
{xml_nodeset (2)}
[1] <FIRST.NAME>Alvaro</FIRST.NAME>
[2] <FIRST.NAME>Janette</FIRST.NAME>

给我预期的输出(查找带有“FIRST.NAME”标签的所有节点)。

但是,如果我执行相同的操作this https://www.dropbox.com/s/37ht3e9c4mzshkb/uniprot_subset.xml?dl=0xml 文件:

example <- read_xml(file.path("~/Downloads", "uniprot_subset.xml"))
> example
{xml_document}
<uniprot>
 [1] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28" modified="2019-01-16" version="35">\n  <accession>Q6GZX4</accession>\n  <name>001R_FRG3G</name>\n  <protein>\n    <recommendedName>\n      <fullName>Putative tr ...
 [2] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28" modified="2019-01-16" version="36">\n  <accession>Q6GZX3</accession>\n  <name>002L_FRG3G</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacter ...
 [3] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2009-06-16" modified="2018-06-20" version="22">\n  <accession>Q197F8</accession>\n  <name>002R_IIV3</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacteri ...
 [4] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2009-06-16" modified="2017-09-27" version="18">\n  <accession>Q197F7</accession>\n  <name>003L_IIV3</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacteri ...
 [5] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28" modified="2019-01-16" version="31">\n  <accession>Q6GZX2</accession>\n  <name>003R_FRG3G</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacter ...
 [6] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28" modified="2017-09-27" version="29">\n  <accession>Q6GZX1</accession>\n  <name>004R_FRG3G</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacter ...
 [7] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2009-06-16" modified="2017-09-27" version="24">\n  <accession>Q197F5</accession>\n  <name>005L_IIV3</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacteri ...
 [8] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28" modified="2019-01-16" version="38">\n  <accession>Q6GZX0</accession>\n  <name>005R_FRG3G</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacter ...
 [9] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2009-06-16" modified="2019-01-16" version="44">\n  <accession>Q91G88</accession>\n  <name>006L_IIV6</name>\n  <protein>\n    <recommendedName>\n      <fullName>Putative Kil ...
[10] <entry xmlns="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28" modified="2017-09-27" version="27">\n  <accession>Q6GZW9</accession>\n  <name>006R_FRG3G</name>\n  <protein>\n    <recommendedName>\n      <fullName>Uncharacter ...

它的行为不同

xml_find_all(example, "//accession")
{xml_nodeset (0)}

基本上,它不会找到任何带有“accession”标签的节点,即使它们存在并且可以通过不同的函数访问,例如使用

xml_children(xml_children(example)[1])[1]
{xml_nodeset (1)}
[1] <accession>Q6GZX4</accession>

谁能告诉我为什么 xml_find_all 函数在后一个示例中找不到任何节点?


发生这种情况是因为您的宠物示例不包含命名空间,但第二个 XML 文件包含命名空间。

example %>% xml_ns()

d1  <-> http://uniprot.org/uniprot
d2  <-> http://uniprot.org/uniprot
d3  <-> http://uniprot.org/uniprot
d4  <-> http://uniprot.org/uniprot
d5  <-> http://uniprot.org/uniprot
d6  <-> http://uniprot.org/uniprot
d7  <-> http://uniprot.org/uniprot
d8  <-> http://uniprot.org/uniprot
d9  <-> http://uniprot.org/uniprot
d10 <-> http://uniprot.org/uniprot

由于每个条目都有相同的命名空间,在这种情况下,最简单的方法可能是剥离(删除)命名空间:

example %>% xml_ns_strip()

And xml_find_all现在应该按预期工作:

example %>% xml_find_all("//accession")

{xml_nodeset (10)}
 [1] <accession>Q6GZX4</accession>
 [2] <accession>Q6GZX3</accession>
 [3] <accession>Q197F8</accession>
 [4] <accession>Q197F7</accession>
 [5] <accession>Q6GZX2</accession>
 [6] <accession>Q6GZX1</accession>
 [7] <accession>Q197F5</accession>
 [8] <accession>Q6GZX0</accession>
 [9] <accession>Q91G88</accession>
[10] <accession>Q6GZW9</accession>

如果您想保留名称空间,您可以像这样访问加入:

example %>% xml_find_all("//d1:accession")

在这种情况下有效,因为默认名称d1赋予第一个条目的命名空间映射到所有条目的相同命名空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xml2 包 (R) 中的 xml_find_all 函数未找到相关节点 的相关文章

随机推荐

  • Django 找不到记录器“城市”的处理程序

    我正在尝试设置 Django Citieshttps github com coderholic django cities https github com coderholic django cities使用以下命令 sudo pyth
  • 文本末尾的空格在右对齐 UITextField 中不可见

    我有一个右对齐的UITextField 最初编辑时 文本末尾不会出现空格 我用这个解决了this https stackoverflow com q 19569688 1971013 替换 与不间断的 u00a0 然而 上面仅在编辑文本字段
  • 在初始化程序中重新加载命名空间常量

    今天遇到一个有趣的情况 我不确定如何解决 给定一个带有初始化器的 Rails 应用程序 file config initializers integrations rb Integrations CONFIGS key gt value f
  • Intel 64 和 IA-32 上的 MESI 有何意义

    MESI 的要点是保留共享内存系统的概念 然而 对于存储缓冲区 事情就变得复杂了 一旦数据到达 MESI 实现的缓存 下游内存就会保持一致 然而 在此之前 每个核心可能对内存位置 X 中的内容存在分歧 具体取决于每个核心的本地存储缓冲区中的
  • 如何使用 JDA 在 Discord 服务器(不是用户/机器人 DM)中创建私有频道:Java Discord API

    我试图让机器人在公会中创建一个私人频道 但在 JDA 文档中找不到任何允许这种情况发生的内容 调用时返回的 ChannelActioncreateTextChannel 在返回中明确将文本作为通道类型 return new ChannelA
  • 如何获取列中每个不同值的计数? [复制]

    这个问题在这里已经有答案了 我有一个名为 posts 的 SQL 表 如下所示 id category 1 3 2 1 3 4 4 2 5 1 6 1 7 2 每个类别编号对应一个类别 我将如何计算每个类别出现在帖子中的次数一条 SQL 查
  • 除法的时间复杂度是多少?

    我使用除法算法 根据https en wikipedia org wiki Computational complexity of mathematical operations https en wikipedia org wiki Co
  • iPython 笔记本上的内联数学模式

    在 iPython 笔记本中 我如何编写数学公式 例如r 2在一行中 乳胶词汇中的内联数学模式 IE 打印公式的时候可以不换行吗 如果像在 LaTeX 中一样 它应该是 r 2 但它不起作用 感谢您的帮助 在 Markdown 单元格中 您
  • 如何编辑 Mailchimp 自动化电子邮件的纯文本版本?

    我已经使用 Mailchimp 运行自动化工作流程一段时间了 其中有一个简单的欢迎新闻通讯 自动化电子邮件编辑器仅允许我编辑电子邮件的 HTML 版本 并自动生成基于文本的版本 但是 它仅在首次创建电子邮件时生成纯文本版本 从那时起 我已经
  • JKS、BKS 和 PKCS12 文件格式

    我正在设置一个无头服务器 该服务器使用用户提供的数据 JS CSS HTML 密钥库 为 Android 构建 Phonegap 混合应用程序 我想进行一些基本的客户端检查 以确保上传的密钥库有效 对于 JKS 文件 我发现可以通过确保提供
  • Excel 2013 COM API 在服务帐户下挂起 ExportAsFixedFormat

    我有一个 NET Windows 服务 它调用 Excel 2013 COM API 以在 PDF 上导出 Excel 文档 我已尝试使用在两个不同域帐户下运行的 Windows 服务来执行此代码 这两个帐户都是运行代码的计算机上的本地管理
  • Matplotlib:imshow 中 set_data 对绘图没有影响

    我有一个奇怪的错误 没有你的帮助我无法修复 当我设置图像后imshow在 matplotlib 中 即使我用方法更改它 它也始终保持不变set data 看看这个例子 import numpy as np from matplotlib i
  • GUI设计技术增强用户体验[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将文本置于圆形按钮上居中

    我想创建一个按钮圆形链接 其中包含文本 但我在将文本置于圆形按钮内居中时遇到问题 行高太大 对这个问题有什么建议吗 这是代码 https jsfiddle net hma443rL https jsfiddle net hma443rL b
  • 如何在 PowerShell 中使用参数执行外部程序?

    我读过这个答案堆栈溢出 https stackoverflow com questions 1673967 how to run exe in powershell with parameters with spaces and quote
  • 更改svg中半圆的背景颜色

    我想在此 svg 代码上创建上弦月和第三弦月
  • Azure 工作簿中的可选下拉参数

    我想在 Azure 工作簿中创建可选下拉参数 创建下拉参数有了本指南 https 20https learn microsoft com en us azure azure monitor visualize workbooks dropd
  • 提交 ID 从哪里来?

    我只是对此很好奇 提交 ID 不能是随机的 因为它们需要是唯一的 不过 它们似乎是随机的 这让我想知道 为什么它们不只是连续的数字 我的意思是 它们只需要在存储库中是唯一的 对吧 或者我在这里错了 Thanks Git 提交 ID 是 SH
  • 我在哪里可以学习如何使 C++ 程序与操作系统 (Linux) 交互

    我是一个 C 初学者 我想创建与操作系统交互的小程序 使用 Kubuntu Linux 到目前为止 我还没有找到任何教程或手册来让 C 与操作系统交互 在 PHP 中 我可以使用命令 exec 或反引号运算符来启动通常在控制台中执行的命令
  • xml2 包 (R) 中的 xml_find_all 函数未找到相关节点

    我使用 R 中的 xml2 包来访问 xml 数据 发现它在不同的 xml documents 上表现不同 在这个宠物的例子中 library xml2 doc lt read xml