SimpleXMLElement():获取基于属性值的XML标记的值

时间:2014-06-11 09:08:52

标签: php xml simplexml

我有以下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<result name="response">
    <doc>
        <str name="index">2</str>
        <str name="summary">A summary</str>
        <str name="title">A Title</str>
        <arr name="media">
            <str>/image/123.jpg</str>
        </arr>
    </doc>
</result>

我正在抓取内容并在PHP中创建SimpleXMLElement。我需要能够根据它的名称值来获取特定标记的内容。例如。如果我试图回应出这样的“总结”:

echo $xmlObj->doc->str['name']->summary;

我知道这不起作用,但会是什么?我看了很多类似的问题,但没有找到这个具体问题。欢呼声。

2 个答案:

答案 0 :(得分:1)

使用XPath(http://www.w3schools.com/php/func_simplexml_xpath.asp

<?php
$string = <<<XML
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <d>
  <c>code</c>
 </d>
</a>
XML;

$xml = new SimpleXMLElement($string);

/* Search for <a><b><c> */
$result = $xml->xpath('/a/b/c');

while(list( , $node) = each($result)) {
    echo '/a/b/c: ',$node,"\n";
}

/* Relative paths also work... */
$result = $xml->xpath('b/c');

while(list( , $node) = each($result)) {
    echo 'b/c: ',$node,"\n";
}
?>

答案 1 :(得分:0)

问题的解决方案如下:

$summary = $xmlObj->xpath('doc/str[@name="summary"]');

if($summary) {
    echo $summary[0];
}

它涉及使用XPath作为a4arpan指出。