【问题标题】:Remove starting tags from an xml string in php从 php 中的 xml 字符串中删除起始标签
【发布时间】:2017-10-10 06:29:02
【问题描述】:

我有一个类似

的网址
http://lx2.loc.gov:210/lcdb?operation=searchRetrieve&recordSchema=marcxml&version=1.1&maximumRecords=10&query=bath.isbn%3D9781594634123%0A++++

它返回一个 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 变量中的期望结果。

【问题讨论】:

  • 你应该已经在这里发布了 xml 结构(至少是一个示例)和期望的结果,你想要实现的目标。

标签: php html xml web extract


【解决方案1】:

将其分解为各个部分的简单方法是...

<?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 表达式中,我使用这两个命名空间来选择内部记录元素。

编辑: 添加属性...

$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>

【讨论】:

  • 我做到了..它从 xml 中删除了几个标签,而不是整个标签。但我不知道它是如何工作的。你能帮我删除所有不必要的标签吗?
  • 我已经更新了代码来限制它,没有意识到额外的水平在那里。
  • 嘿。我试图向记录标签添加一个属性,但它不起作用。但是当我为领导者标签执行此操作时..无法弄清楚原因。我正在使用这个` $xm1l->record->addAttribute('type', 'local'); `
  • Can't check it ATM as the system (lx2.loc.gov) is not working,但你可以试试$xm1l-&gt;record-&gt;addAttribute('type', 'local','');,因为有一个默认的命名空间(第三个参数是命名空间)
  • 不..它没有工作..它给出了这个错误Warning: SimpleXMLElement::addAttribute(): Unable to locate parent Element
猜你喜欢
  • 2018-08-31
  • 2013-02-24
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2014-05-27
相关资源
最近更新 更多