请有人解释如何遍历this xml中的<entry>
代码,以便echo
所有带d:
前缀的元素。
以下是有效的,所以我说的是正确的:
$url = "http://www.treasury.gov/resource-center/data-chart-center/interest-rates/pages/XmlView.aspx?data=yieldyear&year=2015";
$xml = simplexml_load_file($url);
foreach( $xml->entry as $entry ) {
$element = $xml->entry->children();
foreach( $element as $name=>$x ) {
echo $name, '=', $x, "\n";
}
}
但我正在努力使用<content>
元素。
当我将$element
更新为= $xml->entry->content->children();
时,它无效。
请有人帮我调试一下吗?
答案 0 :(得分:2)
你看错了方法。实际的命名空间(var headTags = $("div#word_content").find("*").filter(function(){
return /^h/i.test(this.nodeName);
});
var output = {};
$(headTags).each(function(){
var currentHead = $(this);
var nextNextElem = currentHead.next().next();
var innerText = [];
if(nextNextElem.prop("tagName") == "UL")
{
nextNextElem.find("li").each(function(){
innerText.push($(this).text());
});
}
output[currentHead.text()] = innerText;
});
)就是你所知道的。前缀特定于元素及其后代 - 直到重新定义。它也是元素节点的可选项。以下树元素都具有相同的命名空间:
await DoWorkAsync().ConfigureAwait(false);
http://schemas.microsoft.com/ado/2007/08/dataservices
<f:foo xmlns:f="urn:foo"/>
每个元素都解析为名称空间<bar:foo xmlns:bar="urn:foo"/>
内名为<foo xmlns="urn:foo"/>
的节点。您可以将其读作foo
。
如果检查方法的文档,这里有许多具有实际命名空间的参数,因此您不必知道前缀。对于XPath,您可以注册自己的前缀:
urn:foo
输出:
{urn:foo}foo
您必须在要拨打$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/dataservices/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";
}
的元素上注册前缀。我在示例中使用了不同的前缀,因此您可以看到您不必知道前缀 - 只有命名空间本身。
在DOM中,它是一个单独的对象,6257
2015-01-02T00:00:00
6258
2015-01-05T00:00:00
6259
2015-01-06T00:00:00
6260
2015-01-07T00:00:00
6261
2015-01-08T00:00:00
...
可以直接返回标量值。
xpath()
答案 1 :(得分:0)
与other question一样,您可以使用xpath
的方法:
$xml = simplexml_load_file($url);
foreach ($xml->entry as $entry) { // loop over the entries
print_r($entry->xpath('//d:BC_3MONTH')); // gives you the actual BC_3MONTH
print_r($entry->xpath('//d:Id')); // the actual ID
}