属性に多くの情報を含む XML があります。ここに小さな例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.loc.gov/MARC21/slim">
<record>
<leader>04170npc a22003613u 4500</leader>
<controlfield tag="001">vtls003932502</controlfield>
<controlfield tag="003">WlAbNL</controlfield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">(WlAbNL)1002</subfield>
</datafield>
<datafield tag="040" ind1=" " ind2=" ">
<subfield code="a">WlAbNL</subfield>
<subfield code="b">eng</subfield>
<subfield code="c">WlAbNL</subfield>
</datafield>
<datafield tag="245" ind1="0" ind2="0">
<subfield code="a">Scott Blair Collection,</subfield>
<subfield code="f">1910 -</subfield>
</datafield>
<datafield tag="653" ind1=" " ind2=" ">
<subfield code="a">rheology</subfield>
</datafield>
</record>
<record>
<leader>04229npc a22005893u 4500</leader>
<controlfield tag="001">vtls003932503</controlfield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">(WlAbNL)1004</subfield>
</datafield>
<datafield tag="040" ind1=" " ind2=" ">
<subfield code="a">WlAbNL</subfield>
<subfield code="b">eng</subfield>
<subfield code="c">WlAbNL</subfield>
</datafield>
<datafield tag="245" ind1="0" ind2="0">
<subfield code="a">Celtic Collection,</subfield>
<subfield code="f">17th century -</subfield>
</datafield>
<datafield tag="653" ind1=" " ind2=" ">
<subfield code="a">Scottish Gaelic language</subfield>
</datafield>
</record>
</collection>
現在、ドキュメント全体をロードするphpスクリプトがあります
$xml = simplexml_load_file("Mapping_coll_wales.xml");
$records = $xml->record;
これにより、次のようなレコード配列が作成されます(これを1つのレコードに少し削減しました)
SimpleXMLElement Object
(
[leader] => 04170npc a22003613u 4500
[controlfield] => Array
(
[0] => vtls003932502
[1] => WlAbNL
)
[datafield] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[tag] => 035
[ind1] =>
[ind2] =>
)
[subfield] => (WlAbNL)1002
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[tag] => 040
[ind1] =>
[ind2] =>
)
[subfield] => Array
(
[0] => WlAbNL
[1] => eng
[2] => WlAbNL
)
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[tag] => 245
[ind1] => 0
[ind2] => 0
)
[subfield] => Array
(
[0] => Scott Blair Collection,
[1] => 1910 -
)
)
[3] => SimpleXMLElement Object
(
[@attributes] => Array
(
[tag] => 653
[ind1] =>
[ind2] =>
)
[subfield] => rheology
)
)
)
現在、配列内のどこにあるかを推測して必要なフィールドを取得し、各レコードをループしています (約 500 あります)。
for ($i =0; $i <5; $i++) {
echo '<strong>Title</strong> = : ' . $records[$i]->datafield[2]->subfield . '<br />';
echo '<strong>tag</strong> = :' . $records[$i]->datafield[3]->subfield . '<br />';
echo '<br />------------------------------------------------------------------------<br />';
}
ただし、xml に他のタグが含まれている可能性があるため、インデックス 2 などのサブフィールドであることに依存したくありません。理想的には、次のようなものを使用して呼び出すことができるようにしたいと考えています。
echo '<strong>Title</strong> = : ' . $records[$i]->datafield[245][a] . '<br />';
それはかなり簡単で、何かが欠けているだけだと確信していますが、タグを配列インデックスとしてロードするか、タグでデータフィールドとコードでサブフィールドを直接取得する方法があるとよいでしょう。変化する。
それが理にかなっていることを願っています。
ポール