XPath-REXML-Ruby:选择多个兄弟姐妹/祖先/后代



这是我在这里的第一篇文章。我刚刚开始使用Ruby,并且正在使用REMX进行一些XML处理。我在这里展示我的xml文件的一小部分示例:

  <record>
     <header>
        <identifier>oai:lcoa1.loc.gov:loc.gmd/g3195.ct000379</identifier>
        <datestamp>2004-08-13T15:32:50Z</datestamp>
        <setSpec>gmd</setSpec>
     </header>
     <metadata>
           <titleInfo>
              <title>Meet-konstige vertoning van de grote en merk-waardige zons-verduistering</title>
           </titleInfo>
     </metadata>
  </record>

的目标是将标签中的最后一个数值与我从数组中获得的值列表相匹配。我通过以下代码片段实现了这一点:

ids = XPath.match(xmldoc, "//identifier[text()='oai:lcoa1.loc.gov:loc.gmd/"+mapid+"']")

有了我希望调查的特定标识符,现在我想返回并选择,然后选择以获取该特定标识符的节点中的值。

我查看了 XPath 教程和表达式以及本网站上的许多相关问题,并了解了轴和不同的概念,例如祖先/跟随兄弟姐妹等。但是,我真的很困惑,无法轻易弄清楚这一点。

想知道我是否可以获得任何帮助,或者是否有人可以将我指向"易于"阅读的在线资源。

谢谢。

更新:

我一直在尝试各种代码组合,例如:

idss = XPath.match(xmldoc, "//identifier[text()='oai:lcoa1.loc.gov:loc.gmd/"+mapid+"']/parent::header/following-sibling::metadata/child::mods/child::titleInfo/child::title")

代码编译但不输出任何内容。我想知道我做错了什么。

这里有一种方法可以使用XPath来完成它,然后转到记录,然后XPath来获取标题:

require 'rexml/document'
include REXML
xml=<<END
  <record>
    <header>
      <identifier>oai:lcoa1.loc.gov:loc.gmd/g3195.ct000379</identifier>
      <datestamp>2004-08-13T15:32:50Z</datestamp>
      <setSpec>gmd</setSpec>
    </header>
    <metadata>
      <titleInfo>
        <title>Meet-konstige</title>
      </titleInfo>
    </metadata>
  </record>
END
doc=Document.new(xml)
mapid = "ct000379"
text = "oai:lcoa1.loc.gov:loc.gmd/g3195.#{mapid}"
identifier_nodes = XPath.match(doc, "//identifier[text()='#{text}']")
record_node = identifier_nodes.first.parent.parent
record_node.elements['metadata/titleInfo/title'].text
=> "Meet-konstig"

最新更新