我想選擇一個特定的節點來稍後編輯它的內容和屬性,但我無法選擇一個notice
節點(請參閱下面的PHP代碼)。在DomXML和PHP中通過屬性值獲取節點
XML文檔
<?xml version="1.0" encoding="UTF-8"?>
<notices lastID="0001">
<!--
<notice id="0000" endDate="31-12-2025">
Content of the notice.
</notice>
-->
<notice id="0001" endDate="13-01-2013" active="1">
One amazing notice.
</notice>
</notices>
的$id
值是 「0001」(串)。
PHP
$document = new DOMDocument;
$document = dom_import_simplexml($this->xml);
$notices= $document->getElementsByTagName('notice');
#var_dump($notices);
foreach($notices as $element)
{
if($element->getAttribute('id') == $id)
{
$notice = $element;
var_dump($notice); //Returns absolutely nothing (I guess the if returns false).
}
}
$notice->removeAttribute("endDate");
$notice->setAttribute("endDate",$endDate);
每次我陷入if
聲明,我$notice
無返回值。
我試着用xpath查詢(//notice[@id="{$id}"]
)沒有任何成功。
爲了澄清,我的問題將是$element->getAttribute('id')
似乎並不奏效。
我也試圖與的SimpleXML:
PHP
$document = new DOMDocument;
$document = simplexml_import_dom($this->xml);
$notice = "";
foreach($document->notices->children() as $element)
{
$attributes = $element->attributes();
if($attributes['id'] == $id)
{
$notice= $element;
var_dump($notice);
}
}
$avis->removeAttribute("endDate");
$avis->setAttribute("endDate",$endDate);
的SimpleXML給了我下面的消息:Node no longer exists
以下行:
foreach($document->notices->children() as $element)
你檢查XML文檔是否正確裝入?不知道這是否是答案,但嘗試使用'DOMDocument :: load()'加載文件,並且不需要爲其創建新的DOMDocument實例。 – MahanGM