Php simplexml\u load\u字符串未解析我的XML字符串。字符集问题?
我使用以下PHP代码从NOAA的潮汐报告站API读取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
$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'];