按名称提取节点
Extracting nodes by name
我正在尝试用 xml2 解析 XML 文件。但是我一辈子都无法通过指定名称来弄清楚如何做到这一点。
这个有效:
library(xml2)
library(dplyr)
xml <- read_xml(file)
-->
> xml
{xml_document}
<indexedmzML schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.2_idx.xsd" xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
[1] <mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml ...
[2] <indexList count="2">\n <index name="spectrum">\n <offset idRef="scanId=3027">15181</offset>\n <offset idRef="scanId=3524">30052</offset> ...
[3] <indexListOffset>73363063</indexListOffset>
[4] <fileChecksum>b8f69d6276d9c4929e74416bc9e3446a173d1894</fileChecksum>
而且我可以按位置逐步提取并使用 xpath:
xml_child(xml, 1) %>% xml_child(7) %>% xml_attr("startTimeStamp")
_
xml_child(xml, "/*[1]/*[7]") %>% xml_attr("startTimeStamp")
但是我尝试按名称 select 失败了。
> xml_child(xml, "indexedmzML")
{xml_missing}
<NA>
> xml_child(xml, "mzML")
{xml_missing}
<NA>
和
> xml_child(xml, "/indexedmzML")
{xml_missing}
<NA>
> xml_child(xml, "/mzML")
{xml_missing}
<NA>
和
> xml_child(xml, "/mzML/run")
{xml_missing}
<NA>
能否以某种方式向我指出以某种方式逃避我的解决方案?
编辑:
好的,这是一个数据示例。有了这些数据,我想要的是
xml_child(xml, 1) %>% xml_child(2) %>% xml_attr("startTimeStamp")
但是select按名字编辑。
<?xml version="1.0" encoding="utf-8"?>
<indexedmzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.2_idx.xsd">
<mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" id="0001_LIP1p_20150803_008_CHCl3-MeOH_1_1" version="1.1.0">
<dataProcessing id="pwiz_Reader_Agilent_conversion">
<processingMethod order="0" softwareRef="pwiz">
<cvParam cvRef="MS" accession="MS:1000544" name="Conversion to mzML" value=""/>
</processingMethod>
<processingMethod order="1" softwareRef="pwiz">
<cvParam cvRef="MS" accession="MS:1000035" name="peak picking" value=""/>
<userParam name="Agilent/MassHunter peak picking"/>
</processingMethod>
</dataProcessing>
<run id="_x0030_001_LIP1p_20150803_008_CHCl3-MeOH_1_1" defaultInstrumentConfigurationRef="IC1" startTimeStamp="2015-08-03T14:34:14Z" defaultSourceFileRef="MSScan.bin">
</run>
</mzML>
</indexedmzML>
如果您想从 XML 文件中提取所有 startTimeStamp
值,您可以这样做:
xml %>% xml_find_all("//@startTimeStamp") %>% xml_text()
编辑:
如果你想select它的名字,那么你需要担心命名空间。
的确如此,
xml %>% xml_child("mzML")
将return
{xml_missing}
<NA>
您首先需要检查与您的 XML 文件关联的名称空间:
xml_ns(xml)
# d1 <-> http://psi.hupo.org/ms/mzml
# d2 <-> http://psi.hupo.org/ms/mzml
# xsi <-> http://www.w3.org/2001/XMLSchema-instance
# xsi1 <-> http://www.w3.org/2001/XMLSchema-instance
所以你需要使用:
xml %>% xml_child("d1:mzML")
您感兴趣的属性的完整路径:
xml %>% xml_child("d1:mzML") %>% xml_child("d1:run") %>% xml_attr("startTimeStamp")
xml_ns()
的文档提供了更多信息,并鼓励您使用更具信息性的名称重命名命名空间。
我正在尝试用 xml2 解析 XML 文件。但是我一辈子都无法通过指定名称来弄清楚如何做到这一点。
这个有效:
library(xml2)
library(dplyr)
xml <- read_xml(file)
-->
> xml
{xml_document}
<indexedmzML schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.2_idx.xsd" xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
[1] <mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml ...
[2] <indexList count="2">\n <index name="spectrum">\n <offset idRef="scanId=3027">15181</offset>\n <offset idRef="scanId=3524">30052</offset> ...
[3] <indexListOffset>73363063</indexListOffset>
[4] <fileChecksum>b8f69d6276d9c4929e74416bc9e3446a173d1894</fileChecksum>
而且我可以按位置逐步提取并使用 xpath:
xml_child(xml, 1) %>% xml_child(7) %>% xml_attr("startTimeStamp")
_
xml_child(xml, "/*[1]/*[7]") %>% xml_attr("startTimeStamp")
但是我尝试按名称 select 失败了。
> xml_child(xml, "indexedmzML")
{xml_missing}
<NA>
> xml_child(xml, "mzML")
{xml_missing}
<NA>
和
> xml_child(xml, "/indexedmzML")
{xml_missing}
<NA>
> xml_child(xml, "/mzML")
{xml_missing}
<NA>
和
> xml_child(xml, "/mzML/run")
{xml_missing}
<NA>
能否以某种方式向我指出以某种方式逃避我的解决方案?
编辑:
好的,这是一个数据示例。有了这些数据,我想要的是
xml_child(xml, 1) %>% xml_child(2) %>% xml_attr("startTimeStamp")
但是select按名字编辑。
<?xml version="1.0" encoding="utf-8"?>
<indexedmzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.2_idx.xsd">
<mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" id="0001_LIP1p_20150803_008_CHCl3-MeOH_1_1" version="1.1.0">
<dataProcessing id="pwiz_Reader_Agilent_conversion">
<processingMethod order="0" softwareRef="pwiz">
<cvParam cvRef="MS" accession="MS:1000544" name="Conversion to mzML" value=""/>
</processingMethod>
<processingMethod order="1" softwareRef="pwiz">
<cvParam cvRef="MS" accession="MS:1000035" name="peak picking" value=""/>
<userParam name="Agilent/MassHunter peak picking"/>
</processingMethod>
</dataProcessing>
<run id="_x0030_001_LIP1p_20150803_008_CHCl3-MeOH_1_1" defaultInstrumentConfigurationRef="IC1" startTimeStamp="2015-08-03T14:34:14Z" defaultSourceFileRef="MSScan.bin">
</run>
</mzML>
</indexedmzML>
如果您想从 XML 文件中提取所有 startTimeStamp
值,您可以这样做:
xml %>% xml_find_all("//@startTimeStamp") %>% xml_text()
编辑:
如果你想select它的名字,那么你需要担心命名空间。
的确如此,
xml %>% xml_child("mzML")
将return
{xml_missing}
<NA>
您首先需要检查与您的 XML 文件关联的名称空间:
xml_ns(xml)
# d1 <-> http://psi.hupo.org/ms/mzml
# d2 <-> http://psi.hupo.org/ms/mzml
# xsi <-> http://www.w3.org/2001/XMLSchema-instance
# xsi1 <-> http://www.w3.org/2001/XMLSchema-instance
所以你需要使用:
xml %>% xml_child("d1:mzML")
您感兴趣的属性的完整路径:
xml %>% xml_child("d1:mzML") %>% xml_child("d1:run") %>% xml_attr("startTimeStamp")
xml_ns()
的文档提供了更多信息,并鼓励您使用更具信息性的名称重命名命名空间。