PHP:XML解析问题

时间:2010-11-26 22:16:34

标签: php xml parsing simplexml xml-parsing

我正在使用SimpleXML来解析XMl文档。 我需要能够读取/更新节点属性。

在此XML文档中

<root>
  <node>ABC</node>
  <key>123</key>
  <node2>
     <key>456</key>
  </node2>
  <key>789</key>
</root>

如何读取/更新所有关键节点?该文档没有特定的结构,所以我需要能够在不知道其位置的情况下找到它们。假设我想将关键节点中的数字乘以2。我该怎么办?

韩国社交协会

3 个答案:

答案 0 :(得分:8)

我发现这个问题非常懒惰,但无论如何

$sxe = new SimpleXmlElement($xml);
foreach($sxe->xpath('//key') as $key) $key[0] *= 2;
echo $sxe->asXML();

有很多questions about SimpleXml on Stack Overflow。请在asking your question之前搜索它们。 PHP手册也有涵盖Basic Usage的例子。

答案 1 :(得分:1)

<?php

$xml = '<root>
  <node>ABC</node>
  <key>123</key>
  <node2>
     <key>456</key>
  </node2>
  <key>789</key>
</root>';

$dom = new DOMDocument();
$dom->loadXml($xml);

$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()') as $node)
{
 $newNode = $dom->createDocumentFragment();
 $newNode->appendXML($node->wholeText . ' replaced');
 $node->parentNode->replaceChild($newNode, $node);
}

echo $dom->saveXML();

答案 2 :(得分:1)

最简单的API是QueryPath(或phpQuery):

$qp = qp($xml);

foreach ($qp->find("key") as $key) {
     //@todo: add verification that it's indeed numeric text
     $key->text(  $key->text() * 2  );
}

但“SimpleXML”

可能有类似的东西