0

後でコンテンツと属性を編集するために特定のノードを選択しようとしていますが、noticeノードを選択できません (以下の 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)

4

1 に答える 1

0

私はついにそれを手に入れました。

PHP

$document = simplexml_import_dom($this->xml);
$notice = "";

$xpathResults = $document->xpath('//notice');


foreach($xpathResults as $element)
{
    $elementID = $element->id[0];
    $domXML = dom_import_simplexml($element);

    if((string) $noticeID == $id)
    {
        $notice = $domXML;

    }
}
于 2013-01-09T18:22:33.400 に答える