0

我对 PHP 和 XML 很陌生,希望你能帮助我。搜索论坛并没有帮助我找到特定问题的答案。

我有一个带有 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; ?>

有人可以告诉我我在这里缺少什么吗?

谢谢,蒂姆

4

1 回答 1

1

SimpleXML 无法知道textID标识哪个节点是哪个节点——它只是 XML 中的另一个元素。

根据您的示例输出,您的 XML 有点令人困惑,因为您有多个名为的元素textID,每个元素都有一个子元素,也称为textID,它们具有不同的含义。尽管如此,您可以通过遍历所有外部textID元素并测试其内部textID元素的值来实现您想要做的事情:

foreach ( $objTexts->textID as $item )
{
     if ( $item->textID == '2' )
     {
          ...
     }
}

或者,您可以使用 XPath,它是一种相当简单的 XML 查询语言,并且在 SimpleXML 中以method->xpath()形式得到支持。在您的情况下,您希望找到一个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 )
 {
     ...
 }
于 2013-08-04T22:05:09.100 回答