0

我有一个 manifest.plist 文件(来自 Apple)。这是一个 XML 文件。这是结构的一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>id</key>
    <string>3214</string>
    <key>name</key>
    <dict>
      <key>en</key>
      <string>Hello World</string>
      <key>jp</key>
      <string>Hello World JP</string>
    </dict>
    <key>kilometers</key>
    <integer>430</integer>
    <key>cloud</key>
    <true/>
  </dict>
</plist>

我可以使用 simplexml 将此 XML 作为对象。现在我想更改我的 XML 中的一些值(例如 cloud 为 jp 字符串值的 false)。

4

1 回答 1

1

现在我尝试使用 DOMElement 和 Xpath 查询 '/plist/dict/key[4]' 来获取云密钥。但是如何将其值更改为 false ?

你说的元素在这里:

    <key>cloud</key>
    <true/>

而你想从 更改<true/><false/>。然而,这并没有改变值,而是用<true/>一个新节点替换元素节点,一个<false/>元素节点。

这(真的)不可能,SimpleXML因为它不能替换节点。

DomDocument您可以使用 Docs 功能来做到这DOMNode::replaceChild()一点

一个例子:

假设您有变量$key,并且它是<key>您通过 xpath 获取的元素。

$true  = $key->nextSibling;
$false = $key->ownerDocument->createElement('false');
$key->parentNode->replaceChild($false, $true);
于 2013-03-08T17:56:27.297 回答