我在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)
将XPath与您拥有的文档一起使用,您可以使用限制器组合提取数据。如果你知道你需要datafield元素中的数据 - 标签值是245,而子字段代码是“a”那么你可以做类似......
<?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放在元素名称的前面。 @tag位表示属性值= 264(例如)或代码属性为'a'。