2017-10-11 132 views
0

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

其他字符在结肠的地方使用XML,但结肠是行不通的。我知道它有一些与命名空间相关的东西,但我无法弄清楚这个问题。任何帮助表示赞赏。

回答

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

,所以我写了这个。 '$ nodes [0] - > 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] - > addAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance','http://www.w3.org/2001/XMLSchema-比如'); ' –

+0

输出是'请注意'xsi:xsi'是不必要的,它不应该出现。 –

+0

是的,我想添加两个元素。一个是'xmlns:xsi',另一个是'xsi:schemaLocation'。 –