正在加载 XML,可能是格式错误的名称 space 还是我做错了?

Loading XML, possible malformed name space or am doing it wrong?

我在使用 php 脚本加载 XML 提要时遇到问题。我在我的网站上复制了一份提要并加载它,这样我就知道我在调试什么。文件中的每个条目都有一个名称 space(有几个不同的名称。)

这是我第一次弄乱名称 spaces,我什至无法加载文件。当我尝试

$xml = new SimpleXMLElement($result) or die("Error: Cannot create object\n<hr>".$result);

它触发了错误。这对十几个没有名称 spaces 的不同提要有效(或者至少我没有注意到任何名称 spaces)。我已经尝试了各种方法来获取更多信息,以了解为什么它不能创建简单的XML元素,并且到目前为止 none 其中 return 是一个问题。

我已经用 4 个不同的在线验证器验证了 xml 提要。 3 似乎使用 javascript 并说提要是完美的,第 4 个 http://www.xmlvalidation.com/ 将代码上传到其网站,return 说他们的网站有错误。(与其他 xml 他们的验证器工作得很好。)

我想我已经将问题缩小到名称 space 的问题。如果我删除顶部的 name space 东西,我可以用上面的代码加载 xml 文件,然后我会得到一堆 name space 错误。您可以在下面看到名称space 信息。

<?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/">

Link 示例 xml 页 http://waterservices.usgs.gov/nwis/iv/?format=waterml,1.1&sites=06306300&parameterCd=00060,00065

这应该有效:

$xml = new SimpleXMLElement($your_xml_data, 0, false, 'ns1', true);

使用不同的命名空间尝试以下解决方案。

$xml_element = simplexml_load_file('http://waterservices.usgs.gov/nwis/iv/?format=waterml,1.1&sites=06306300&parameterCd=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 对象并迭代它以获得所需的输出。