大佬教程收集整理的这篇文章主要介绍了如何在不使用PHP进行迭代的情况下按属性选择xml元素?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml的XML
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time='2013-08-23'>
<Cube currency='USD' rate='1.3355'/>
<Cube currency='GBP' rate='0.85910'/>
<Cube currency='HUF' rate='298.98'/>
</Cube>
</Cube>
</gesmes:Envelope>
(我出于示范目的删除了一些值)
HI可以使用simplexml这样加载它:
$XML=simplexml_load_file("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
foreach($XML->Cube->Cube->Cube as $rate){
...
但是我想在不迭代的情况下获得价值,我真的不想使用正则表达式…
我尝试了类似的方法,但没有成功:
$sxe=simplexml_load_file("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
$sxe->registerXPathNamespace('c', 'http://www.gesmes.org/xml/2002-08-01');
$result = $sxe->xpath('//c:Cube[@currency="USD"]');
解决方法:
Cube元素不在http://www.gesmes.org/xml/2002-08-01名称空间中,该名称空间已被赋予gesmes前缀,它们在默认名称空间中,即http://www.ecb .int / vocabulary / 2002-08-01 / eurofxref.
因此,而不是:
$sxe->registerXPathNamespace('c', 'http://www.gesmes.org/xml/2002-08-01');
$result = $sxe->xpath('//c:Cube[@currency="USD"]');
$sxe->registerXPathNamespace('c', 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref');
$result = $sxe->xpath('//c:Cube[@currency="USD"]');
这是带有更正名称空间的a live demo showing a result count of 1.
要尝试对此进行权威解释,请考虑以下Namespaces in XML规范摘录:
元素Cube没有前缀,因此我们寻找范围内的默认名称空间声明.到达最外层元素,我们发现xmlns =“ http://www.ecb.int/vocabulary/2002-08-01/eurofxref”,因此Cube元素的“名称空间名称”是URI http:// www. ecb.int/vocabulary/2002-08-01/eurofxref,“本地名称”为Cube.
如果我们改用gesmes:Sender元素,则会看到它具有前缀gesmes,因此我们将寻找该前缀的定义.找到xmlns:gesmes =“ http://www.gesmes.org/xml/2002-08-01”,我们可以得出结论,“扩展名称”具有“命名空间名称” http://www.gesmes.org/ xml / 2002-08-01,以及“本地名称”发件人.
为了在XPath中使用这些“命名空间名称”,我们必须分配要在XPath表达式中使用的前缀,这些前缀不必与实际文档中的前缀相对应.在这种情况下,我们选择为命名空间http://www.ecb.int/vocabulary/2002-08-01/eurofxref分配前缀c,以便表达式// c:Cube将匹配任何带有“命名空间”的元素http://www.ecb.int/vocabulary/2002-08-01/eurofxref的名称”和Cube的“本地名称”.
以上是大佬教程为你收集整理的如何在不使用PHP进行迭代的情况下按属性选择xml元素?全部内容,希望文章能够帮你解决如何在不使用PHP进行迭代的情况下按属性选择xml元素?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。