SimpleXMLElement::registerXPathNamespace

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

SimpleXMLElement::registerXPathNamespace为下一个 XPath 查询创建前缀/ns 上下文

说明

public SimpleXMLElement::registerXPathNamespace(string $prefix, string $namespace): bool

为下一个 XPath 查询创建前缀/ns 上下文。特别地,如果给定 XML 文档的提供者更改了命名空间前缀,这将非常有用。 registerXPathNamespace 将为关联的命名空间创建一个前缀,允许您访问该命名空间中的节点,而无需更改代码以允许提供者指定的新的前缀。

参数

prefix

在 XPath 查询中用于 namespace 中给出的命名空间的命名空间前缀。

namespace

用于 XPath 查询的命名空间。这必须与 XML 文档中使用的命名空间匹配,否则使用 prefix 的 XPath 查询将不会返回任何结果。

返回值

成功时返回 true,失败时返回 false

范例

示例 #1 设置要在 XPath 查询中使用的命名空间前缀

<?php

$xml
= <<<EOD
<book xmlns:chap="http://example.org/chapter-title">
<title>My Book</title>
<chapter id="1">
<chap:title>Chapter 1</chap:title>
<para>Donec velit. Nullam eget tellus vitae tortor gravida scelerisque.
In orci lorem, cursus imperdiet, ultricies non, hendrerit et, orci.
Nulla facilisi. Nullam velit nisl, laoreet id, condimentum ut,
ultricies id, mauris.</para>
</chapter>
<chapter id="2">
<chap:title>Chapter 2</chap:title>
<para>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin
gravida. Phasellus tincidunt massa vel urna. Proin adipiscing quam
vitae odio. Sed dictum. Ut tincidunt lorem ac lorem. Duis eros
tellus, pharetra id, faucibus eu, dapibus dictum, odio.</para>
</chapter>
</book>
EOD;

$sxe = new SimpleXMLElement($xml);

$sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
$result = $sxe->xpath('//c:title');

foreach (
$result as $title) {
echo
$title . "\n";
}

?>

上面的示例将输出

Chapter 1
Chapter 2

请注意示例中显示的 XML 文档如何使用 chap 作为前缀设置命名空间。假设此文档(或类似的文档)过去可能使用 c 作为同一个命名空间的前缀。由于它已更改,XPath 查询将不再返回正确的结果,查询需要修改。使用 registerXPathNamespace 避免将来修改查询,即使提供者更改了命名空间前缀也是如此。

参见

添加注释

用户贡献注释 1 注释

5
Lea Hayes
13 年前
看起来您必须在使用 XPath 时为每个节点使用 registerXPathNamespace

<?php
$xml
= simplexml_load_file($filename);

$xml->registerXPathNamespace('test', 'http://example.com');

$shopping_element = $xml->xpath('test:shopping-list');

// 在没有以下行的情况下会出错:

$shopping_element->registerXPathNamespace('test', 'http://example.com');

$fruit = $shopping_element->xpath('test:fruit');
?>
To Top