我有这个xml文件,我试图更改最后一个节点的nodeValue,但没有工作:
<?xml version="1.0"?>
<files>
<file>.DS_Store</file>
<file>ID2PDF_log_1.xml</file>
<file>ID2PDF_log_12.xml</file>
<file>ID2PDF_log_15.xml</file>
</files>
我发现了这个节点:
$Sig = new DomDocument();
$Sig->loadXML($xml);
$dom = $Sig->documentElement;
$Node = $dom->getElementsByTagName('file')->item(0);
$Node->lastChild->nodeValue = 'ID2PDF_log_17.xml'; // <-- Not working
为什么不工作?
您的代码运行得非常好。它将TagName为"file"的第一个项的最后一个节点设置为"ID2PDF_log_17.xml",但您不需要$dom = $Sig->documentElement;
。并将$dom
更改为$Sig
$Sig = new DomDocument();
$Sig->loadXML($xml);
$dom = $Sig->documentElement; // ← delete
//--------↓ change to $Sig
$Node = $dom->getElementsByTagName('file')->item(0);
$Node->lastChild->nodeValue = 'ID2PDF_log_17.xml';
输出:
<?xml version="1.0"?>
<files>
<file>ID2PDF_log_17.xml</file> //← changed
<file>ID2PDF_log_1.xml</file>
<file>ID2PDF_log_12.xml</file>
<file>ID2PDF_log_15.xml</file>
</files>
在您的问题中,我理解您想要更改最后一个nodeValue。因此,如果您想更改最后一个nodeValue,而不是当前正在更改的第一个节点,只需将项目计数器更改为3(计数器从0开始)
<?php
$xml = '<?xml version="1.0"?>
<files>
<file>.DS_Store</file>
<file>ID2PDF_log_1.xml</file>
<file>ID2PDF_log_12.xml</file>
<file>ID2PDF_log_15.xml</file>
</files>';
$Sig = new DomDocument();
$Sig->loadXML($xml);
//-----------------------------------------------↓
$Node = $Sig->getElementsByTagName('file')->item(3);
$Node->lastChild->nodeValue = 'ID2PDF_log_17.xml'; // <-- Not working
echo $Sig->saveXML();
?>
输出:
<?xml version="1.0"?>
<files>
<file>.DS_Store</file>
<file>ID2PDF_log_1.xml</file>
<file>ID2PDF_log_12.xml</file>
<file>ID2PDF_log_17.xml</file> //← changed
</files>