用PHP动态编辑XML

问题描述 投票:0回答:1

我正在尝试读写总是不同的XML文件。

我想做的是定义CSS属性,可以为我的CSS中的每个类/ ID更改(由php完成)。

所以元素可能看起来像这样:

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

但是内部节点可以更改(任何css属性)。

我想阅读此内容,然后制作一个表单,在其中可以编辑属性(可以做到这一点)。

现在我需要保存XML。由于PHP,我无法立即提交完整的表单(无法提交您不知道表单元素名称的表单)。我正在尝试使用Ajax并在表单中进行编辑时保存每个节点。 (onChange)

所以我知道元素的“ id”标签和节点名称。但是我找不到直接访问节点并使用DOMDocument或SimpleXML对其进行编辑的方法。

已经被告知尝试使用XPath,但是我无法使用XPath进行编辑。

我该怎么做?

php xml xml-parsing
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();

See it working

© www.soinside.com 2019 - 2024. All rights reserved.