這是我的prior question的後續內容。我想我深入瞭解了所以花了一些時間充分理解XML名稱空間。使用XML前綴/名稱空間創建Xpath
從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:entry/atom:content/meta:properties
原因是該條目標籤不使用前綴使用registerXPathNamespace()
爲<entry xmlns="http://www.w3.org/2005/Atom">
創建。
爲什麼要創建meta
前綴?已經有一個m:
前綴,其中定義了相同的名稱空間。
會用下面的方法做同樣的事情嗎?
//atom:entry/atom:content/m:properties
不幸的是,我今天晚些時候才能訪問我的服務器。那麼我會自己測試一下。如果它不起作用,更關心爲什麼不,邏輯會建議它應該?
下一個問題:http://stackoverflow.com/questions/33771883/name-sql-table-rows-to-match-xml-namespace-elements – DVCITIS