在php中向xml节点添加带冒号的属性

问题描述 投票:0回答:2

我在 php 变量中有一个 xml 值,我需要在“record”元素上添加属性

xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
    and xmlns="http://www.loc.gov/MARC21/slim"
。下面是我在 php 中的 xml

<record xmlns="http://www.loc.gov/MARC21/slim">
  <leader>01344cam a2200385 i 4500</leader>
  <controlfield tag="001">19196211</controlfield>
  <controlfield tag="005">20160810165833.0</controlfield>
  <controlfield tag="008">160728t20162015nyu           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">2</subfield>
    <subfield code="e">ncip</subfield>
    <subfield code="f">20</subfield>
    <subfield code="g">y-gencatlg</subfield>
  </datafield>
</record>

其他字符在冒号的位置起作用,但冒号不起作用。我知道它有一些与命名空间相关的东西,但我无法找出问题所在。如有任何帮助,我们将不胜感激。

php html xml attributes
2个回答
0
投票

当添加带有 : 的属性时,这就像您所说的添加带有命名空间的属性。 您需要做的是确保定义了该名称空间。 因此,在添加属性时,您使用第三个参数作为命名空间的 URI...

$nodes = $xml->xpath('//zs:record//def:record')[0];
$nodes[0]->addAttribute('xsi:schemaLocation', 'http://www.loc.gov/MARC21/slim',
        'http://www.w3.org/2001/XMLSchema-instance');

echo $nodes[0]->asXML();

给予...

<record xmlns="http://www.loc.gov/MARC21/slim" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.loc.gov/MARC21/slim">

0
投票

当属性名称包含冒号时,只需在名称“xmlns:”前添加:

$object->addAttribute('xmlns:xsi:schemaLocation', 'http://www.loc.gov/MARC21/slim');

© www.soinside.com 2019 - 2024. All rights reserved.