如何访问 PHP 中嵌套 XML 中的值
How to access values in nested XML in PHP
我正在使用 PHP 中的以下 XML 字符串,我想从中访问特定值。
例如:如何提取title的值?
以下是我的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>
我应该如何获得值 "Half girlfriend" 或 "New Delhi"?
感谢任何帮助。
将 XPath 与您拥有的文档结合使用,您可以使用限制器组合提取数据。如果您知道您将需要数据字段元素中的数据 - 标签值为 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'.
我正在使用 PHP 中的以下 XML 字符串,我想从中访问特定值。
例如:如何提取title的值?
以下是我的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>
我应该如何获得值 "Half girlfriend" 或 "New Delhi"?
感谢任何帮助。
将 XPath 与您拥有的文档结合使用,您可以使用限制器组合提取数据。如果您知道您将需要数据字段元素中的数据 - 标签值为 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'.