2013-03-07 57 views
0

我在XML中有很多很多的paragraph元素,在这些段落里面经常有子元素,比如name。我想运行一个xpath,它将返回子元素的值和父段落的xml:id。理想的结果是某种数组,其中键是paragraph元素的xml:id,值是子元素name的文本节点。任何想法如何我可以用一个单一的xpath完成这个?返回一对值的xpath(使用php)

目前,我正在尝试类似的事情,涉及两个xpaths,并试图将两者放在一起,但这是变得非常混乱,不工作。

$result_array = array(); 
    $xmldoc = simplexml_load_file("$fullfilename"); 
    $xmldoc->registerXPathNamespace("tei", "http://www.tei-c.org/ns/1.0"); 
    $names = $xmldoc->xpath("//name"); 
foreach ($names as $name) 
{ 
    $pids = $xmldoc->xpath("//tei:p[tei:name='$name']/@xml:id") 
    $result_array[$name] = $pids[0] 
} 

我在这里得到一个错误,说[$name]是非法抵消。我也只是不认为这会给我想要的东西,因为我相信它总是会返回xml:id的第一段,它的子值name元素的值与输入相匹配。但我想要的是该段落中找到该实例的段落xml:id值。

感谢您的帮助。

+0

你为什么不尝试https://code.google.com/p/phpquery/ ? – deadlock 2013-03-07 12:43:27

+0

请将您的XMl添加到问题中 – JWiley 2013-03-07 13:07:15

+0

尝试更改'“// tei:p [tei:name ='$ name']/@ xml:id”'to'“// tei:p [tei:name = “+ $ name”+“]/@ xml:id”' – JWiley 2013-03-07 13:16:28

回答

0

的SimpleXMLElement :: XPath返回的SimpleXMLElement对象的数组或FALSE在发生错误的情况下。

这意味着您使用SimpleXMLElement对象作为您的数组键,因此非法偏移的错误。

为了让使用它作为重点的真正价值,将其转换为字符串如下:

$result_array[(string) $name] = $pids[0];