1

这是我在此的头一篇博文。我刚刚开始使用 Ruby,并且正在使用 REXML 进行一些 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")

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

4

1 回答 1

1

这是一种使用 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"
于 2012-04-06T14:53:54.073 回答