有没有一种方法,我可以用SimpleXML得到一个特定的项目?
例如,我想获得一个ID为设置项的标题12437这个示例XML:
<items>
<item>
<title>blah blah 43534</title>
<id>43534</id>
</item>
<item>
<title>blah blah 12437</title>
<id>12437</id>
</item>
<item>
<title>blah blah 7868</title>
<id>7868</id>
</item>
</items>
这里有两个简单的做你想要的东西,一个是像这样每个项目迭代的方法:
<?php
$str = <<<XML
<items>
<item>
<title>blah blah 43534</title>
<id>43534</id>
</item>
<item>
<title>blah blah 12437</title>
<id>12437</id>
</item>
<item>
<title>blah blah 7868</title>
<id>7868</id>
</item>
</items>
XML;
$data = new SimpleXMLElement($str);
foreach ($data->item as $item)
{
if ($item->id == 12437)
{
echo "ID: " . $item->id . "\n";
echo "Title: " . $item->title . "\n";
}
}
现场演示。
其他将使用XPath,以针点你想这样的确切数据:
<?php
$str = <<<XML
<items>
<item>
<title>blah blah 43534</title>
<id>43534</id>
</item>
<item>
<title>blah blah 12437</title>
<id>12437</id>
</item>
<item>
<title>blah blah 7868</title>
<id>7868</id>
</item>
</items>
XML;
$data = new SimpleXMLElement($str);
// Here we find the element id = 12437 and get it's parent
$nodes = $data->xpath('//items/item/id[.="12437"]/parent::*');
$result = $nodes[0];
echo "ID: " . $result->id . "\n";
echo "Title: " . $result->title . "\n";
现场演示。
你想使用XPath这一点。 它基本上完全一样,中列出的SimpleXML:选择具有一定属性值的元素 ,但在你的情况你没有决定的属性值,但对元素值。
但是在XPath两个你要找的是parent.So制定XPath表达式的元素是那种直截了当:
// Here we find the item element that has the child <id> element
// with node-value "12437".
list($result) = $data->xpath('(//items/item[id = "12437"])[1]');
$result->asXML('php://output');
输出(美化):
<item>
<title>title of 12437</title>
<id>12437</id>
</item>
因此,让我们再次看到这个XPath查询的心脏:
//items/item[id = "12437"]
这是写为:选择所有<item>
这是任何一个子元素<items>
元素,其对自己有一个名为的子元素<id>
其值为"12437"
。
而现在周围缺少的东西:
(//items/item[id = "12437"])[1]
括号周围说:从所有这些<item>
元素,只挑了第一个。 根据您的结构,这可能是也可能不是必要的。
因此,这里是全用法示例和在线演示 :
<?php
/**
* php simplexml get a specific item based on the value of a field
* @lin https://stackoverflow.com/q/17537909/367456
*/
$str = <<<XML
<items>
<item>
<title>title of 43534</title>
<id>43534</id>
</item>
<item>
<title>title of 12437</title>
<id>12437</id>
</item>
<item>
<title>title of 7868</title>
<id>7868</id>
</item>
</items>
XML;
$data = new SimpleXMLElement($str);
// Here we find the item element that has the child <id> element
// with node-value "12437".
list($result) = $data->xpath('(//items/item[id = "12437"])[1]');
$result->asXML('php://output');
所以你拨打您的问题标题字段是由书子元素。 更复杂的XPath查询是得到你在找什么搜索时,请记住这一点。