我使用下面的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);
不幸的是,我最终看到它显示了这个:
对象(SimpleXMLElement)#246(0){}
在我看来,XML的格式非常好——为什么不进行解析呢?通过查看另一个问题(Simplexml_load_string()解析错误失败),我认为可能是头的问题-http调用确实返回了一个字符集值“ISO-8859-1”。但是添加utf8\u encode()
调用似乎并没有起到作用。
特别令人困惑的是,simplexml\u load\u string()
实际上并没有失败-它返回一个令人愉快的XML数组,只是其中没有任何内容!
你已经被SimpleXML书中最古老的技巧愚弄了(我也被愚弄了):SimpleXML不会将整个文档解析为PHP对象,它向内部结构提供了一个PHP API。像var\u dump
这样的函数看不到此结构,所以不要总是给出对象中的有用信息。
它看起来“空”的原因是它列出了根元素的子元素,这些子元素在默认名称空间中,但没有,它们都在“soapenv:”名称空间中。
要访问带名称空间的元素,您需要使用children()
方法,传入完整的名称空间名称(推荐)或其本地前缀(更简单,但可能会因另一端文件生成方式的更改而中断)。要切换回“默认名称空间”,请使用-
因此,您可以获得第一个
stationV2
元素的ID
属性,如下所示(实时演示):
// 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'];
我已经编写了一些调试函数来与SimpleXML一起使用,这些函数应该比
var_dump
等更少误导。这里是一个现场演示与您的代码和simplexml_dump
。
问题内容: 我有一个字符串,其内容是XML。我想将标签分开,并使其成为Java中的字符串列表。以下是我正在尝试的东西: 我想将其分为以下列表: 我试图通过JAXB处理器执行此操作,但效果不佳。还使用split尝试了一些愚蠢的逻辑,但这也无济于事。还有其他方法可以做到这一点吗? 问题答案:
问题内容: 您如何解析存储在Java字符串对象中的xml? Java的XMLReader仅从URI或输入流中解析XML文档。无法从包含xml数据的字符串进行解析? 现在,我有以下内容: 在我的处理程序上,我有这个: 提前致谢 问题答案: 该SAXParser的可以读取的的InputSource。 一个 InputSource的 可以采取 读者 在其构造 因此,您可以通过StringReader来解
Milo Yip 2016/9/27 本文是《从零开始的 JSON 库教程》的第三个单元解答编。解答代码位于 json-tutorial/tutorial03_answer。 1. 访问的单元测试 在编写单元测试时,我们故意先把值设为字符串,那么做可以测试设置其他类型时,有没有调用 lept_free() 去释放内存。 static void test_access_boolean() {
对性能是否有影响? 不同Java版本的行为是否有差异?
我有一个输入表单,允许某人键入unicode字符。所以它可能是类似于“嘿,uF32A怎么了?如果我得到这个字符串,它将有一个子字符串“\uF32A”,我如何将其转换为字符“\uF32A”?
所以我得到了一个xml文件从肥皂服务(我无法控制)。它返回了一个xmlns,这导致了简单的XML问题。我正在运行一个str_replace来解决这个问题,但是现在simpleXML只返回一个空对象。XML结构看起来很好,没有错误,只是一个空对象。 返回:SimpleXMLElement对象() str replace之前的XML源是: 更换后: 任何帮助都将不胜感激,这快把我逼疯了! ----因此