0

我有一个关于 xpath 和数组的问题。我想知道是否可以在一些 simpleXML 上使用 xpath 并让它返回节点名称及其值的关联数组。例如,假设我有以下 XML:

<element1 page="1">blah</element1>
<element2 page="1">blah blah</element2>
<element3 page="2">blah</element3>
<element4 page="3">blah blah</element4>

现在,如果我要去$xml->xpath('//node()[@page="1"]');,那么它将返回一个如下所示的数组:

array( 0 => 'blah' , 1 => 'blah blah' );

是否可以获得类似于下面的数组?

array( element1 => 'blah' , element2 => 'blah blah' );

谢谢您的帮助!

4

2 回答 2

1

我不认为您可以将其提取到那种数组中(您需要告诉 PHP 放置哪些标签、子节点、属性等),但是您可以使用DOMXPath 类提取 DOMNode 元素,这给了您一个DOMNodeList对象:

$document = new DOMDocument();
$document->load($myXmlFile);
$xpath = new DOMXPath($document);

$result = $xpath->query('//node()[@page="1"]');
var_dump($result->length); // int(2)
var_dump($result->item(0)->tagName); // string(8) "element1"
var_dump($result->item(1)->tagName); // string(8) "element2"
于 2009-07-20T14:24:47.127 回答
1

对于简单的 XML,数组并不完全像您提到的那样,它更像是:

$result = array( 0 => simplexmlObject('blah') , 1 => simplexmlObject('blah blah') );

因为您有一个 SimpleXML 对象而不是文字字符串,所以您仍然可以访问完整的 SimpleXML 文档:

$result[0]->addChild("another", "child");

// which is <element1 page="1">blah<another>child</another></element1>

或更接近您的问题

$name = $result[0]->getName();

如果您对 DOM 属性可以做的所有事情都着迷,那么您可以执行以下操作:

$parent = dom_import_simplexml($result[0])->parent; 
于 2009-08-13T18:24:57.180 回答