【问题标题】:add attribute with colon to xml node in php在php中将带冒号的属性添加到xml节点
【发布时间】:2017-10-11 05:36:47
【问题描述】:

我在 php 变量中有一个 xml 值,我需要在“记录”元素上添加属性 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 web attributes


    【解决方案1】:

    当添加带有 : 的属性时,这就像您所说的添加带有命名空间的属性。您需要做的是确保已定义此命名空间。所以在添加属性的时候,使用第三个参数作为命名空间的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">
    

    【讨论】:

    • 所以我写了这个。 $nodes[0]-&gt;addAttribute('xsi:schemaLocation', 'http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd', 'http://www.w3.org/2001/XMLSchema-instance'); $nodes[0]-&gt;addAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance','http://www.w3.org/2001/XMLSchema-instance');
    • 并且输出是&lt;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 http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xsi:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt; 注意xsi:xsi 是不必要的,它不应该出现。
    • 是的,我正在尝试添加两个元素.. 一个是 xmlns:xsi,另一个是 xsi:schemaLocation
    • 你只需要添加一个属性,我已经更新了代码示例更清晰,并添加了我得到的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多