PHP:XML解析问题

发布于 2024-10-04 19:41:21 字数 376 浏览 1 评论 0原文

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

在这个 XML 文档中,

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

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

谢了。

I'm using SimpleXML for parsing XMl documents.
I need to be able to read/update node attributes.

In this XML document

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

How can I read/update all key nodes? the document doesn't have a specific structure, so I need to be able to find them without knowing their position. Let's say I want to multiply by 2 the numbers in the key nodes. How can I do it?

Tks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

囚你心 2024-10-11 19:41:21

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

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

Stack Overflow 上有很多有关 SimpleXml 的问题。请在提出问题之前搜索它们。 PHP 手册还提供了涵盖基本用法的示例。

I find the question extremely lazy, but anyway

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

There is plenty of questions about SimpleXml on Stack Overflow. Please search for them before asking your question. The PHP Manual also has examples covering Basic Usage.

瀟灑尐姊 2024-10-11 19:41:21
<?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();
<?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();
终难愈 2024-10-11 19:41:21

最简单的 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”也可以实现类似的功能

The simplest possible API is QueryPath (or phpQuery):

$qp = qp($xml);

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

But something similar is possible with "SimpleXML"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文