从 php 中的 xml 字符串中删除起始标记
Remove starting tags from an xml string in php
我有一个 URL 喜欢
http://lx2.loc.gov:210/lcdb?operation=searchRetrieve&recordSchema=marcxml&version=1.1&maximumRecords=10&query=bath.isbn%3D9781594634123%0A++++
which returns 一个 xml 字符串,现在我想删除这个 xml 字符串的起始标记并将 xml 字符串的其余部分存储在一个变量中.
EDIT 0:
<!-- begin snippet: js hide: false console: true babel: false -->
目前这是从 URL 返回的 xml 字符串。
EDIT:1
<record xmlns="http://www.loc.gov/MARC21/slim">
<leader>01618cam a2200385 i 4500</leader>
<controlfield tag="001">18265203</controlfield>
<controlfield tag="005">20160810164742.0</controlfield>
<controlfield tag="008">140812s2015 nyu 000 1 eng</controlfield>
<datafield tag="906" ind1=" " ind2=" ">
<subfield code="a">7</subfield>
<subfield code="b">cbc</subfield>
<subfield code="c">orignew</subfield>
<subfield code="d">1</subfield>
<subfield code="e">ecip</subfield>
<subfield code="f">20</subfield>
<subfield code="g">y-gencatlg</subfield>
</datafield>
<datafield tag="925" ind1="0" ind2=" ">
<subfield code="a">Acquire</subfield>
<subfield code="b">1 shelf copy</subfield>
<subfield code="x">policy default</subfield>
</datafield>
</record>
这是我想要存储在 php 中的 xml 变量中的期望结果。
将其拆分成多个部分的简单方法是...
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
$xml = simplexml_load_file("http://lx2.loc.gov:210/lcdb?operation=searchRetrieve&recordSchema=marcxml&version=1.1&maximumRecords=10&query=bath.isbn%3D9781594634123%0A++++");
$xml->registerXPathNamespace('zs', 'http://www.loc.gov/zing/srw/');
$xml->registerXPathNamespace('def', 'http://www.loc.gov/MARC21/slim');
$nodes = $xml->xpath('//zs:record//def:record');
echo $nodes[0]->asXML();
XPath 获取每个记录元素,然后您可以将每个元素转换为 XML(我只对第一个元素这样做过,通常 foreach
会更好)。
registerXPathNamespace 被调用两次,一次用于注册 zs 命名空间,第二次用于内部记录元素中的默认命名空间。请注意,我使用 'def' 作为前缀以使其更容易。然后在 XPath 表达式中,我将这两个命名空间用于 select 内部记录元素。
编辑:
添加属性...
$nodes = $xml->xpath('//zs:record//def:record');
$nodes[0]->addAttribute('type', 'local');
echo $nodes[0]->asXML();
因为记录已经是根 - 这会创建...
<record xmlns="http://www.loc.gov/MARC21/slim" type="local">
<leader>01618cam a2200385 i 4500</leader>
我有一个 URL 喜欢
http://lx2.loc.gov:210/lcdb?operation=searchRetrieve&recordSchema=marcxml&version=1.1&maximumRecords=10&query=bath.isbn%3D9781594634123%0A++++
which returns 一个 xml 字符串,现在我想删除这个 xml 字符串的起始标记并将 xml 字符串的其余部分存储在一个变量中.
EDIT 0:
<!-- begin snippet: js hide: false console: true babel: false -->
目前这是从 URL 返回的 xml 字符串。
EDIT:1
<record xmlns="http://www.loc.gov/MARC21/slim">
<leader>01618cam a2200385 i 4500</leader>
<controlfield tag="001">18265203</controlfield>
<controlfield tag="005">20160810164742.0</controlfield>
<controlfield tag="008">140812s2015 nyu 000 1 eng</controlfield>
<datafield tag="906" ind1=" " ind2=" ">
<subfield code="a">7</subfield>
<subfield code="b">cbc</subfield>
<subfield code="c">orignew</subfield>
<subfield code="d">1</subfield>
<subfield code="e">ecip</subfield>
<subfield code="f">20</subfield>
<subfield code="g">y-gencatlg</subfield>
</datafield>
<datafield tag="925" ind1="0" ind2=" ">
<subfield code="a">Acquire</subfield>
<subfield code="b">1 shelf copy</subfield>
<subfield code="x">policy default</subfield>
</datafield>
</record>
这是我想要存储在 php 中的 xml 变量中的期望结果。
将其拆分成多个部分的简单方法是...
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
$xml = simplexml_load_file("http://lx2.loc.gov:210/lcdb?operation=searchRetrieve&recordSchema=marcxml&version=1.1&maximumRecords=10&query=bath.isbn%3D9781594634123%0A++++");
$xml->registerXPathNamespace('zs', 'http://www.loc.gov/zing/srw/');
$xml->registerXPathNamespace('def', 'http://www.loc.gov/MARC21/slim');
$nodes = $xml->xpath('//zs:record//def:record');
echo $nodes[0]->asXML();
XPath 获取每个记录元素,然后您可以将每个元素转换为 XML(我只对第一个元素这样做过,通常 foreach
会更好)。
registerXPathNamespace 被调用两次,一次用于注册 zs 命名空间,第二次用于内部记录元素中的默认命名空间。请注意,我使用 'def' 作为前缀以使其更容易。然后在 XPath 表达式中,我将这两个命名空间用于 select 内部记录元素。
编辑: 添加属性...
$nodes = $xml->xpath('//zs:record//def:record');
$nodes[0]->addAttribute('type', 'local');
echo $nodes[0]->asXML();
因为记录已经是根 - 这会创建...
<record xmlns="http://www.loc.gov/MARC21/slim" type="local">
<leader>01618cam a2200385 i 4500</leader>