2017-10-11 9 views
0

PHPで次のXML文字列を使用しています。特定の値にアクセスしたいと思います。PHPでネストされたXMLの値にアクセスする方法

たとえば、タイトルの値をどのように抽出できますか?以下は

は私のXMLコンテンツである:私は値 "ハーフガールフレンド" や "ニューデリー" を取得することになっていますどのように

<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> 
 
    <leader>01118cam a22003497i 4500</leader> 
 
    <controlfield tag="001">18475363</controlfield> 
 
    <controlfield tag="005">20151007123810.0</controlfield> 
 
    <controlfield tag="008">141017s2014 ii   000 f eng d</controlfield> 
 
    
 
    <datafield tag="245" ind1="1" ind2="0"> 
 
    <subfield code="a">Half girlfriend /</subfield> 
 
    <subfield code="c">Chetan Bhagat.</subfield> 
 
    </datafield> 
 
    <datafield tag="264" ind1=" " ind2="1"> 
 
    <subfield code="a">New Delhi :</subfield> 
 
    <subfield code="b">Rupa,</subfield> 
 
    <subfield code="c">2014.</subfield> 
 
    </datafield> 
 
    </record>

何か助けていただければ幸いです。

+0

これまでに試したコードを表示できますか? –

+0

これまでのところ。私はXMLをPHP配列に変換してから、レコードを手動でアクセスしようとしました。 '$ value = simplexml_load_string($ final_marc); $ json = json_encode($ value); $ configData = json_decode($ json、true); print_r($ configData); 'これまでの運がなかったのは間違ったアプローチだと思います。 –

+0

'final_marc'は私のXML文字列を保持する変数です。 –

答えて

0

ご使用のドキュメントでXPathを使用すると、リミッタの組み合わせでデータを抽出できます。タグ値が245で、サブフィールドコードがデフォルトを持っているように、「」あなたのような...

<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 

$final_marc = <<< XML 
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> 
    <leader>01118cam a22003497i 4500</leader> 
    <controlfield tag="001">18475363</controlfield> 
    <controlfield tag="005">20151007123810.0</controlfield> 
    <controlfield tag="008">141017s2014 ii   000 f eng d</controlfield> 

    <datafield tag="245" ind1="1" ind2="0"> 
    <subfield code="a">Half girlfriend /</subfield> 
    <subfield code="c">Chetan Bhagat.</subfield> 
    </datafield> 
    <datafield tag="264" ind1=" " ind2="1"> 
    <subfield code="a">New Delhi :</subfield> 
    <subfield code="b">Rupa,</subfield> 
    <subfield code="c">2014.</subfield> 
    </datafield> 
    </record> 
XML; 
$value=simplexml_load_string($final_marc); 
$value->registerXPathNamespace("d","http://www.loc.gov/MARC21/slim"); 
echo "245-a".$value->xpath("//d:datafield[@tag='245']/d:subfield[@code='a']/text()")[0].PHP_EOL; 
echo "264-a".$value->xpath("//d:datafield[@tag='264']/d:subfield[@code='a']/text()")[0].PHP_EOL; 

何かを行うことができている - あなたが知っている場合は、あなたは、データフィールドの要素にどこのデータが必要になりますこれはドキュメントに登録されています。この場合は、便宜上接頭辞として 'd'を定義しています。次に、XPathでdを要素名の前に置きます。 @タグビットは、属性値= 264(例えば)またはコード属性が「a」であることを示しています。

+0

あなたは私にこの行を説明してもらえますか?$ value-> registerXPathNamespace( "d"、 "http://www.loc.gov/MARC21/slim"); ' –

+0

XPathを使うときは、クエリで使用しています。このドキュメントはデフォルトの名前空間(通常の要素に接頭辞を持たない)を持っているので、便利な値として 'd'を使用しました。後続のXPath式では、要素名の前に「d:」を付けると、特定の名前空間に要素が必要であることが示されます。 –

+0

説明してくれてありがとうございました。 –

関連する問題