0

paragraph在 XML 中有很多很多元素,在这些段落中通常有子元素,例如name. 我想运行一个 xpath,它将返回子元素的值和xml:id父段落的值。理想的结果是某种数组,其中键是paragraph元素xml:id,值是子name元素的文本节点。有什么想法可以通过单个 xpath 完成吗?

目前,我正在尝试涉及两个 xpath 并尝试将两者放在一起的类似操作,但这变得非常混乱并且无法正常工作。

    $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 找到该实例的段落的值。

谢谢你的帮助。

4

1 回答 1

0

SimpleXMLElement::xpath 返回 SimpleXMLElement 对象的数组,如果出错则返回 FALSE。

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

为了获得将其用作键的实际值,请将其转换为字符串,如下所示:

$result_array[(string) $name] = $pids[0];
于 2013-04-26T18:42:37.857 回答