Php 如何解析XML键:值对
我有一个客户端服务器返回以下(奇怪的)XML响应;如何访问每个键:值对Php 如何解析XML键:值对,php,xml,Php,Xml,我有一个客户端服务器返回以下(奇怪的)XML响应;如何访问每个键:值对 $xml = '<?xml version="1.0"?> <response> <string key="__status">success</string> <string key="id">1000</string> <string key="mask">9999</string> </re
$xml = '<?xml version="1.0"?>
<response>
<string key="__status">success</string>
<string key="id">1000</string>
<string key="mask">9999</string>
</response>';
<pre>
<?php
$xml = '<?xml version="1.0"?>
<response>
<string key="__status">success</string>
<string key="id">1000</string>
<string key="mask">9999</string>
</response>';
$test = new SimpleXMLElement($xml);
echo "Mask = ".$test->string[2];
?>
</pre>
如果我的内存服务器正确
simplexml
是扩展名。你确定你安装了它吗?顺便说一句,simplexml
是在PHP5.0中添加的,因此如果我的内存服务器me rightsimplexml
是扩展名,请确保您没有运行较低版本。你确定你安装了它吗?顺便说一句,simplexml
是在PHP5.0中添加的,因此请确保您没有运行较低版本如果您需要特定元素,可以使用XPath:
$matches = $test->xpath('//string[@key="mask"]');
(这需要PHP5.2)
这将给你:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[key] => mask
)
[0] => 9999
)
)
如果需要所有元素,则必须迭代所有string
元素并访问它们的文本和key
属性:
$items = array();
foreach($test->string as $item) {
$items[(string) $item->attributes()->key] = (string) $item;
}
给出:
Array
(
[__status] => success
[id] => 1000
[mask] => 9999
)
如果需要特定元素,可以使用XPath:
$matches = $test->xpath('//string[@key="mask"]');
(这需要PHP5.2)
这将给你:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[key] => mask
)
[0] => 9999
)
)
如果需要所有元素,则必须迭代所有string
元素并访问它们的文本和key
属性:
$items = array();
foreach($test->string as $item) {
$items[(string) $item->attributes()->key] = (string) $item;
}
给出:
Array
(
[__status] => success
[id] => 1000
[mask] => 9999
)
字符串[2];
?>
这是工作代码。
字符串[2];
?>
这是工作代码。您必须迭代
字符串元素,并访问它们的文本及其键属性。@Felix Kling我就是这么想的,只是检查是否有更简单的方法。XML的这种结构是否格式良好?是的。如果你想要一个特定的元素,你也可以使用XPath。你必须迭代字符串
元素,访问它们的文本和键
属性。@Felix Kling我就是这么想的,只是检查是否有更简单的方法。XML的这种结构是否格式良好?是的。如果需要特定元素,也可以使用XPath。请检查我的答案。它更简单。我对这个解决方案很满意。检查我的答案。它更简单。我对这个解决方案很满意。抱歉,这不起作用,因为我无法保证我将接收的元素的顺序或数量。它解决了这个特定的实例,但不是一般的问题。但我要解决OP问题中的语法错误。无论如何,FELIX提出的正确问题要好得多。Freak对原始问题的模糊性表示抱歉,我认为说来自客户端服务器的数据足够好,这暗示数据可能在不断变化。@Michael Pasqualone-没问题,伙计。:)抱歉,这不起作用,因为我无法保证我将接收的元素的顺序或数量。它解决了这个特定实例,但不是一般问题。但我要解决OP问题中的语法错误。无论如何,FELIX提出的正确问题要好得多。Freak对原始问题的模糊性表示抱歉,我认为说来自客户端服务器的数据足够好,这暗示数据可能在不断变化。@Michael Pasqualone-没问题,伙计。:)