0

以下にアウトラインがあるように、XML 構造があります。xPath を使用して構造内の特定の要素を見つけようとしていますが、うまくいきません。これは私がこれまでに持っているものです:

$resultset[0]['bibXML'] - これは、この変数に渡される内容を正確に貼り付けたものです。http://pastebin.com/CwtFG5dj

これは、print_r() を使用した $myNode の出力へのリンクです。 http://pastebin.com/TwDaxs42

$myNode = new SimpleXMLElement($resultset[0]['bibXML']);
$bnum = $myNode->xpath("record/datafield[@tag='035']/subfield[@code='a']");


<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.loc.gov/MARC21/slim">
<record>
    <leader>01220nam  2200265   4500</leader>
    <controlfield tag="001">ocm00000197</controlfield>
    <datafield tag="035" ind1="" ind2="">
        <subfield code="a">.b10000021</subfield>
        <subfield code="b">a    </subfield>
        <subfield code="c">-</subfield>
    </datafield>
    <datafield tag="245" ind1="" ind2="">
        <subfield code="a">Some Book Title</subfield>
        <subfield code="b">a    </subfield>
        <subfield code="c">-</subfield>
    </datafield>
</record>
</collection>
4

1 に答える 1

1

あなたの要素はhttp://www.loc.gov/MARC21/slim名前空間にあります。xml 名前空間について学習します

XPath は、接頭辞が付いていないため、null 名前空間の要素と一致しています。要素は実際には null 名前空間にないため、XPath は何にも一致しません。

名前空間プレフィックスをregisterXPathNamespaceメソッドに登録し、そのプレフィックスを使用して要素名を修飾する必要があります。

これは完全なコードになります。

$myNode = simplexml_load_string($resultset[0]['bibXML']);

$myNode->registerXPathNamespace('m21s', 'http://www.loc.gov/MARC21/slim');

$results = $myNode->xpath('m21s:record/m21s:datafield[@tag="035"]/m21s:subfield[@code="a"]');
$bnum = ($results) ? (string) $results[0] : null;

var_export($bnum);
于 2013-01-23T18:45:30.833 に答える