像PHP-DomDocument中的PHP类SimpleXML中的'getElement(s)By'?

时间:2011-03-26 11:48:40

标签: php xml simplexml domdocument

我使用DomDocument& SimpleXML,但服务器不支持DomDocument(仅限SimpleXML)。现在我正在重写它,但SimpleXML中没有任何函数,如“getElementsByTagName”和“getElementById”(我只需要那些2)。我在php.net&上搜索了很多google.com,但找不到一个。

写我自己并不好。那么,有没有人知道我的替代/功能/提示/脚本? :)

提前致谢。

2 个答案:

答案 0 :(得分:7)

令人高兴的是,如果SimpleXML不支持这些DOM方法,它使用SimpleXMLElement::xpath()方法支持XPath。

使用XPath查询按标签名称或ID进行搜索不应该太难。 我认为像这些问题的查询应该可以解决问题:

  • 按ID搜索://*[@id='VALUE']
  • 按标记名称搜索://TAG_NAME



例如,使用以下部分XML和代码加载它:

$str = <<<STR
<xml>
    <a id="plop">test id</a>
    <b>hello</b>
    <a>a again</a>
</xml>
STR;
$xml = simplexml_load_string($str);

您可以通过id="plop"找到一个元素,如下所示:

$id = $xml->xpath("//*[@id='plop']");
var_dump($id);

并搜索所有<a>标记:

$as = $xml->xpath("//a");
var_dump($as);

输出结果如下:

array
  0 => 
    object(SimpleXMLElement)[2]
      public '@attributes' => 
        array
          'id' => string 'plop' (length=4)
      string 'test id' (length=7)

array
  0 => 
    object(SimpleXMLElement)[3]
      public '@attributes' => 
        array
          'id' => string 'plop' (length=4)
      string 'test id' (length=7)
  1 => 
    object(SimpleXMLElement)[4]
      string 'a again' (length=7)

答案 1 :(得分:1)