【问题标题】:How to change the value of an xml item using php如何使用 php 更改 xml 项的值
【发布时间】:2011-04-11 08:13:28
【问题描述】:

我有以下xml文件test.xml:

<a>
  <b c="test1" d="test2"/>
  <b c="test3" d="test4"/>
</a>

这个 xml 文件可以有 1 个或多个 b 元素。我想问一下如何使用php更改特定b中项目c的值。

提前致谢。

【问题讨论】:

标签: php xml


【解决方案1】:

使用:http://php.net/manual/en/book.dom.php

样本(所有 c 属性):

<?php
$dom = new DomDocument;
$dom->load('sample.xml');

$xpath = new DomXPath($dom);

$cAttribs = $xpath->query('//*[@c]');
foreach ($cAttribs as $entry) {
    $entry->setAttribute('c', 'newValue');
}

header('Content-Type: text/xml; charset="UTF-8"');
echo $dom->saveXml();

仅特定节点:

$dom = new DomDocument;
$dom->loadXml('<?xml version="1.0" encoding="UTF-8" ?>
<a>
  <b c="test1" d="test2" id="special-case" />
  <b c="test3" d="test4" />
</a>');

$xpath = new DomXPath($dom);

$cAttribs = $xpath->query('//*[@id="special-case"]');
foreach ($cAttribs as $entry) {
    $entry->setAttribute('c', 'newValue');
}

header('Content-Type: text/xml; charset="UTF-8"');
echo $dom->saveXml();

【讨论】:

  • 感谢您的回复。我已经在 php.net 上查看示例。然而,上面的代码改变了所有 c 项的值。例如 test1 和 test3 成为 newValue。但是,我只想更改其中一个。到目前为止,我已经设法同时或仅更改了第一个元素。但是我没有找到改变特定的方法
  • 要仅更改特定节点,您需要对该节点进行某种标识。之后,您需要将 xpath 表达式更改为仅选择此节点。我将更改示例以反映这一点。
  • 效果不错,但与我预期的不同,但使用 ID 可能更容易处理这些项目。谢谢
【解决方案2】:

制作一个“.htaccess”文件,用于控制服务器端页面......

在您的页面中添加以下行:

AddType application/x-httpd-php .xml

这会将任何 xml 文档转换为 PHP,但是如果您不希望 php 在您的 xml 中,它仍然可以,因为 php 是灵活的,并且页面可以工作而无需实际编写 php。

现在使用一些 str 替换来获得你想要的工作......

<?php

$xml = "<a>
  <b c="test1" d="test2"/>
  <b c="test3" d="test4"/>
</a>";

$find = array("test1","test2","test3","test4");

$xml = str_replace($find, "stuff", $xml);

echo $xml;

// output:
// <a>
//   <b c="stuff" d="stuff"/>
//   <b c="stuff" d="stuff"/>
// </a>

?>

我希望这就是您要找的,希望对您有所帮助...

【讨论】:

  • 这会改变所有的值,而不仅仅是一个特定的值。我的问题已经回答了,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多