将带冒号的属性添加到php

时间:2017-10-11 05:36:47

标签: php html xml web attributes

我在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>

其他字符在冒号处起作用,但冒号不起作用。我知道它有与命名空间相关的东西,但我无法弄清楚问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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">