PHP的SimpleXML基于字段的值,获取特定项目PHP的SimpleXML基于字段的值,获取特定

2019-05-12 09:09发布

有没有一种方法,我可以用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>

Answer 1:

这里有两个简单的做你想要的东西,一个是像这样每个项目迭代的方法:

<?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";

现场演示。



Answer 2:

你想使用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查询是得到你在找什么搜索时,请记住这一点。



文章来源: php simplexml get a specific item based on the value of a field