我在加载带有php脚本的XML提要时遇到问题。我在我的网站上复制了提要并加载它,以便我知道我在调试什么。文件中的每个条目都有一个命名空间(有几个不同的命名空间)。
这是我第一次弄乱命名空间,我什至无法加载文件。当我尝试时
$xml = new SimpleXMLElement($result) or die("Error: Cannot create object'n<hr>".$result);
它会触发错误。这适用于十几个没有命名空间的不同提要(或者至少我没有注意到任何命名空间)。我已经尝试了各种方法来获取有关为什么它不能创建简单XMLElement的更多信息,到目前为止,它们都没有返回问题。
我已经使用 4 个不同的在线验证器验证了 xml 提要。 3 似乎使用 JavaScript 并说提要是完美的,第 4 http://www.xmlvalidation.com/将代码上传到其站点并返回说他们的站点有错误。(使用其他xml,它们的验证器工作得很好。
我想我已经将问题缩小到命名空间的东西。如果我删除顶部的名称空间内容,我可以使用上面的代码加载 xml 文件,然后我得到一堆命名空间错误。您可以在下面看到命名空间信息。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:timeSeriesResponse xsi:schemaLocation="http://www.cuahsi.org/waterML/1.1/ http://waterservices.usgs.gov/WaterML-1.1.xsd" xmlns:ns1="http://www.cuahsi.org/waterML/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:queryInfo xmlns:ns2="http://www.cuahsi.org/waterML/1.1/">
链接到示例 xml 页面 http://waterservices.usgs.gov/nwis/iv/?format=waterml,1.1&sites=06306300¶meterCd=00060,00065
使用不同的命名空间尝试以下解决方案。
$xml_element = simplexml_load_file('http://waterservices.usgs.gov/nwis/iv/?format=waterml,1.1&sites=06306300¶meterCd=00060,00065');
$name_spaces = $xml_element->getNamespaces(true);
print_r($name_spaces);
$withns1 = $xml_element->children($name_spaces['ns1']);
$withns2 = $xml_element->children($name_spaces['ns2']);
$withxsi = $xml_element->children($name_spaces['xsi']);
var_dump($withns1);
var_dump($withns2);
var_dump($withxsi);
变量 $name_spaces
将在 XML 文档中列出所有命名空间。print_r($name_spaces);
的输出将是
Array
(
[ns1] => http://www.cuahsi.org/waterML/1.1/
[xsi] => http://www.w3.org/2001/XMLSchema-instance
[ns2] => http://www.cuahsi.org/waterML/1.1/
)
使用上面的方法,您可以获取XML对象并迭代它以获得所需的输出。
这应该有效:
$xml = new SimpleXMLElement($your_xml_data, 0, false, 'ns1', true);