0

常に異なる XML ファイルを読み書きしようとしています。

私がやりたいことは、css の各クラス/id に対して変更できる CSS プロパティを定義することです (これは php によって行われます)。

したがって、要素は次のようになります。

<element id="header">
    <position>left</position>
    <background>#fff</background>
    <color>#000</color>
    <border>2px dotted #GGG</border>
</element>

ただし、内部ノードは変更される可能性があります (任意の css プロパティ)。

これを読んで、プロパティを編集できるフォームを作成したいです(これを行うことができました)。

ここで、XML を保存する必要があります。PHP のせいで、一度に完全なフォームを送信できません (フォーム要素名がわからないフォームを送信できません)。私はAjaxでそれを行い、フォームで編集したときに各ノードを保存しようとしています。(オンチェンジ)

これで、要素の「id」タグとノード名がわかります。しかし、ノードに直接アクセスして DOMDocument や SimpleXML で編集する方法が見つかりませんでした。

XPathを試してみるように言われましたが、XPathを使用して編集できませんでした。

どうすればこれを行うことができますか?

4

1 に答える 1

1
$xml = <<<XML
<rootNode>
    <element id="header">
        <position>left</position>
        <background>#fff</background>
        <color>#000</color>
        <border>2px dotted #GGG</border>
    </element>
</rootNode>
XML;

// Create a DOM document from the XML string
$dom = new DOMDocument('1.0');
$dom->loadXML($xml);

// Create an XPath object for this document
$xpath = new DOMXPath($dom);

// Set the id attribute to be an ID so we can use getElementById()
// I'm assuming it's likely you will want to make more than one change at once
// If not, you might as well just XPath for the specific element you are modifying
foreach ($xpath->query('//*[@id]') as $element) {
    $element->setIdAttribute('id', TRUE);
}

// The ID of the element the CSS property belongs to
$id = 'header';

// The name of the CSS property being modified
$propName = 'position';

// The new value for the property
$newVal = 'right';

// Do the modification
$dom->getElementById($id)
    ->getElementsByTagName($propName)
    ->item(0)
    ->nodeValue = $newVal;

// Convert back to XML
$xml = $dom->saveXML();

動いているのを見る

于 2012-08-10T10:07:52.550 に答える