我有一个关于 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' );

谢谢您的帮助!

有帮助吗?

解决方案

我不认为你可以将其获取到那种数组中(你需要告诉 PHP 放什么标签、子节点、属性等),但是你可以使用 DOMXPath 类, ,这给你一个 DOM节点列表 目的:

$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"

其他提示

有关简单的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; 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top