1

これが私の最初の投稿です。Rubyを使い始めたばかりで、XML処理にREXMLを使用しています。ここに私の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のチュートリアルと式、およびこのWebサイトの関連する質問の多くを見て、軸と、祖先/後続の兄弟などのさまざまな概念について学びました。しかし、私は本当に混乱していて、これを簡単に理解できません。

何か助けが得られるのか、誰かが私を「読みやすい」オンラインリソースに向けてくれるのかと思っていました。

ありがとうございました。

アップデート:

私は次のようなコードのさまざまな組み合わせを試してきました。

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 に答える