gpt4 book ai didi

xml - 使用 XML 前缀/命名空间创建 Xpath

转载 作者:行者123 更新时间:2023-12-03 16:10:02 25 4
gpt4 key购买 nike

这是我的 prior question 的后续内容.我想我已经深入了解了,所以花了一些时间来完全理解 XML 命名空间。

来自 this XML 页面,将专注于以下元素一分钟:

<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">

我了解 m:前缀已用于区分 properties来自其他文档中具有相同名称的元素的元素,以防此类文档被合并。
我知道为了使用前缀,必须定义该前缀的命名空间。这样的定义是使用 XML 命名空间属性 (xmlns) 完成的,语法是 xmlns:prefix="URI" . URI 是 Uniform Resource Identifier ,这基本上是元素的来源。 URI 过去被称为 Uniform Resource Names (URN) ,它们本质上是一样的。

现在看看我之前的问题的答案:
$url = "http://www.treasury.gov/resource-center/data-chart-center/interest-rates/pages/XmlView.aspx?data=yieldyear&year=2015";
$element = simplexml_load_file($url);

$element->registerXPathNamespace(
'atom', 'http://www.w3.org/2005/Atom'
);
$element->registerXpathNamespace(
'meta', 'http://schemas.microsoft.com/ado/2007/08/dataservice/metadata'
);

foreach ($element->xpath('//atom:entry/atom:content/meta:properties') as $properties) {
$properties->registerXpathNamespace('data', 'http://schemas.microsoft.com/ado/2007/08/dataservices');
echo $properties->xpath('data:Id')[0], "\n";
echo $properties->xpath('data:NEW_DATE')[0], "\n\n";
}

XPath 是一种用于定义部分 XML 文档的语法。 registerXPathNamespace()函数为指定的命名空间创建一个前缀。

为什么 atom 对我来说很有意义前缀是使用 registerXPathNamespace() 创建的对于 <entry xmlns="http://www.w3.org/2005/Atom">为了像这样引用它 //atom:entry/atom:content/meta:properties因为入口标签不使用前缀。

为什么 meta创建前缀?已经有一个 m:定义了相同命名空间的前缀。

使用下面的会做同样的事情吗?
//atom:entry/atom:content/m:properties

不幸的是,直到今天晚些时候我才能访问我的服务器。那我自己测试一下。如果它不起作用,对为什么不更感兴趣,逻辑会建议它应该吗?

最佳答案

m:前缀绑定(bind)在 XML 实例中,但您的 XPath 处理器不知道这一点。它需要单独绑定(bind)(注册)前缀。
meta:前缀是任意的。可能是 m:就像 XML 一样,但没关系。只要 URI 相同。 atom:前缀可能是 a:它仍然可以工作。

关于xml - 使用 XML 前缀/命名空间创建 Xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com