Php simplexml\u load\u字符串未解析我的XML字符串。字符集问题?

Php simplexml\u load\u字符串未解析我的XML字符串。字符集问题?,php,simplexml,xml-namespaces,noaa,Php,Simplexml,Xml Namespaces,Noaa,我使用以下PHP代码从NOAA的潮汐报告站API读取XML数据: $rawxml = file_get_contents( "http://opendap.co-ops.nos.noaa.gov/axis/webservices/activestations/" ."response.jsp?v=2&format=xml&Submit=Submit" ); $rawxml = utf8_encode($rawxml); $ob = simplexml_load_s

我使用以下PHP代码从NOAA的潮汐报告站API读取XML数据:

$rawxml = file_get_contents(
    "http://opendap.co-ops.nos.noaa.gov/axis/webservices/activestations/"
    ."response.jsp?v=2&format=xml&Submit=Submit"
);
$rawxml = utf8_encode($rawxml);
$ob = simplexml_load_string($rawxml);
var_dump($ob);
不幸的是,我最终发现它显示了以下内容:

对象(simplexmlement)#246(0){

在我看来,XML的格式非常好——为什么不进行解析呢?通过查看另一个问题(),我认为头可能是问题所在——http调用确实返回了一个字符集值“ISO-8859-1”。但是添加
utf8\u encode()
调用似乎并没有起到作用

特别令人困惑的是,
simplexml\u load\u string()
实际上并没有失败-它返回一个令人愉快的XML数组,只是其中没有任何内容

你被SimpleXML书中最古老的把戏愚弄了(我也被愚弄了):SimpleXML不会将整个文档解析为PHP对象,它向内部结构提供了一个PHP API。像
var\u dump
这样的函数看不到此结构,所以不要总是给出对象中的有用信息

它看起来“空”的原因是它列出了根元素的子元素,这些子元素在默认名称空间中,但没有,它们都在“soapenv:”名称空间中

要访问带名称空间的元素,您需要使用,传入完整的名称空间名称(推荐)或其本地前缀(更简单,但可能会因在另一端生成文件的方式的更改而中断)。要切换回“默认名称空间”,请使用
->children(null)

因此,您可以获得第一个
stationV2
元素的
ID
属性,如下所示():

我所写的应该比
var_dump
等要少很多误导性。

你被SimpleXML书中最古老的把戏愚弄了(还愚弄了我):SimpleXML不会将整个文档解析为PHP对象,它向内部结构提供了一个PHP API。像
var\u dump
这样的函数看不到此结构,所以不要总是给出对象中的有用信息

它看起来“空”的原因是它列出了根元素的子元素,这些子元素在默认名称空间中,但没有,它们都在“soapenv:”名称空间中

要访问带名称空间的元素,您需要使用,传入完整的名称空间名称(推荐)或其本地前缀(更简单,但可能会因在另一端生成文件的方式的更改而中断)。要切换回“默认名称空间”,请使用
->children(null)

因此,您可以获得第一个
stationV2
元素的
ID
属性,如下所示():


我已经写了一篇文章,它应该比
var_dump
等文章的误导性小得多。

看起来很多标签没有正确终止。通过检查并获得
元素类型“shef_id”必须由匹配的结束标记“”终止
是否检查SimpleXML记录或报告的错误?为了获得最大输出,try看起来有很多标记没有正确终止。通过检查并获得
元素类型“shef_id”必须由匹配的结束标记“”终止
是否检查SimpleXML记录或报告的错误?要获得最大输出,请尝试Wow。非常感谢你。现在效果很好。这真是太棒了——正如你可能猜到的,我完全被卡住了。哇。非常感谢你。现在效果很好。这太棒了——正如你可能猜到的,我完全被卡住了。
// Define constant for the namespace names, rather than relying on the prefix the remote service uses remaining stable
define('NS_SOAP', 'http://schemas.xmlsoap.org/soap/envelope/');

// Download the XML
$rawxml = file_get_contents("http://opendap.co-ops.nos.noaa.gov/axis/webservices/activestations/response.jsp?v=2&format=xml&Submit=Submit");
// Parse it
$ob = simplexml_load_string($rawxml);

// Use it!
echo $ob->children(NS_SOAP)->Body->children(null)->ActiveStationsV2->stationsV2->stationV2[0]['ID'];