【发布时间】:2015-11-19 16:40:36
【问题描述】:
这是我的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
很遗憾,直到今天晚些时候我才能访问我的服务器。那我自己测试一下。如果它不起作用,更感兴趣的是为什么不,逻辑会建议它应该?
【问题讨论】:
-
我关于 XML 命名空间系列的下一个问题:stackoverflow.com/questions/33771883/…
标签: xml xpath namespaces