【问题标题】:Get xml results where element node is equal to string获取元素节点等于字符串的xml结果
【发布时间】:2014-08-05 08:20:46
【问题描述】:

好的,xml文件看起来像这样,它被设置为一个变量$otherdata

<result>
 <sighting>
  <name>Johhny</name>
  <last>smith</last>
  <phone>5551234</phone>
 </sighting>
 </result>

php 代码是这样的

$dom = new DOMDocument;
$dom ->load($otherdata);
$xpath = new DomXpath($dom);

$query = '//result/sighting[name = "Johhny"]/.';
$entries = $xpath->query($query);

foreach ($entries as $entry) {
 $newlat = $entry->textContent;

 echo $newlat
 }

我遇到麻烦的地方是尝试获取“last”和“phone”属性中的值并将其设置为等于变量以便稍后存储和回显...谢谢

【问题讨论】:

  • 如果有人对如何用一个很有帮助的变量替换“Johnny”有任何想法,也可以作为奖励

标签: php xpath xpathquery


【解决方案1】:

你可以使用

$query = '//result/sighting[name = "Johhny"]';

作为路径,您可以直接选择sighting 元素。然后你可以读出内容并改变它

foreach ($entries as $entry) {
 $last = $entry->getElementsByTagName('last')->item(0)->textContent;
 $entry->getElementsByTagName('name')->textContent = $newName;
 }

【讨论】:

  • 感谢您的快速回复,不幸的是,我需要获取多个元素...我没有在同一代码中将它们全部列出..
【解决方案2】:

通过这种方式,您可以遍历所有瞄准元素,并在这些元素中获得所有子元素。现在您可以将所有数据存储在一个数组中并稍后显示。

$data = array();
$xml = new DOMDocument();
$xml->load($otherdata);

$nodes = $xml->getElementsByTagName('sighting');
foreach ($nodes as $node) {
    $children = $node->childNodes; 
    $i=0;
    foreach ($children as $child) { 
        $data[$i][] = $child->nodeValue;
    }
}

这样您可以更新名称元素并保存 xml 文档。

$xml = new DOMDocument();
$xml->load($file);

$nodes = $xml->getElementsByTagName('sighting');
foreach ($nodes->item as $node) {
    $children = $node->childNodes; 
    foreach ($children as $child) { 
        if ($child->nodeName == 'name')
            $child->nodeValue = 'Not Johnny';
    } 
}

$xml->save($file);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多