我是PHP的新手,希望你可以帮助我。 搜索论坛并没有帮助我找到我的具体问题的答案。
我有一个带有simplexml数组的PHP页面,如下所示,只是更长的时间:
SimpleXMLElement Object
(
[textID] => Array
(
[0] => SimpleXMLElement Object
(
[textID] => 1
[content] => Text1
)
[1] => SimpleXMLElement Object
(
[textID] => 2
[content] => Text2
)
[2] => SimpleXMLElement Object
(
[textID] => 3
[content] => Text3
)
)
)
现在我试图通过引用它的整数ID来回显这个数组中的特定值。 我得到这个工作的唯一方法是以下,但这只是数组中的顺序,而不是实际的ID:
<?php echo $objTexts->textID[1]->content; ?>
有人可以告诉我这里缺少什么吗?
谢谢,蒂姆
答案 0 :(得分:1)
SimpleXML无法知道textID
标识哪个节点是哪个节点 - 它只是XML中的另一个元素。
根据您的示例输出,您的XML有点令人困惑,因为您有多个名为textID
的元素,每个元素都有一个子节点,也称为textID
,它具有不同的含义。尽管如此,您可以通过循环遍历所有外部textID
元素并测试其内部textID
元素的值来实现您想要做的事情:
foreach ( $objTexts->textID as $item )
{
if ( $item->textID == '2' )
{
...
}
}
或者,您可以使用XPath,这是一种非常简单的XML查询语言,并且在the ->xpath()
method形式的SimpleXML中受支持。在您的情况下,您希望找到一个textID
节点,其中包含具有特定值的textID
子节点,因此代码看起来像这样:
// ->xpath always returns a plain PHP array - not a SimpleXML object
$xpath_results = $objTexts->xpath('//textID[textID=2]');
// If you're certain you only want the first result:
echo $xpath_results[0]->content;
// If you might want multiple matches
foreach ( $xpath_results as $item )
{
...
}