更改最后一个Child的节点值

时间:2015-06-29 05:00:01

标签: php domdocument getelementsbytagname

我有这个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

为什么不工作?

1 个答案:

答案 0 :(得分:1)

您的代码工作正常。它将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>