2012-08-08 109 views
1

读取每个元素我从一个API的XML输出以下解析XML和PHP中

<?xml version='1.0' encoding='UTF-8'?> 
<Response> 
    <ReturnRow Output1="11" Output2="12" Output3="13" Output4="14" Output5="15" /> 
    <ReturnRow Output1="21" Output2="22" Output3="23" Output4="24" Output5="25" /> 
    <Messages> 
     <Message Code="INFO" Msg="Your request is successful." Type="APP"/> 
    </Messages>  
</Response> 

我试图解析使用PHP上面的XML,环子元素ReturnRown和回声出Output1Output2转换成HTML表格。

这里是我的代码目前:

$doc = new DOMDocument(); 
$doc->loadXML($test); //$test is holding the above XML 
$node = $doc->getElementsByTagName("ReturnRow"); 
foreach ($node as $book) { 
    var_dump($book); 
} 

但上面没有实际给我的价值观Ouput1Output2

我缺少什么或者做错了吗?

的我上面的PHP代码的结果是:

object(DOMElement)#3 (18) { ["tagName"]=> string(9) "ReturnRow" ["schemaTypeInfo"]=> NULL  ["nodeName"]=> string(9) "ReturnRow" ["nodeValue"]=> string(0) "" ["nodeType"]=> int(1)  ["parentNode"]=> string(22) "(object value omitted)" ["childNodes"]=> string(22) "(object value omitted)" ["firstChild"]=> NULL ["lastChild"]=> NULL ["previousSibling"]=> string(22) "(object value omitted)" ["nextSibling"]=> string(22) "(object value omitted)" ["attributes"]=> string(22) "(object value omitted)" ["ownerDocument"]=> string(22) "(object value omitted)" ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> string(9) "ReturnRow" ["baseURI"]=> string(20) "file:///W:/ischools/" ["textContent"]=> string(0) "" } object(DOMElement)#5 (18) { ["tagName"]=> string(9) "ReturnRow" ["schemaTypeInfo"]=> NULL ["nodeName"]=> string(9) "ReturnRow" ["nodeValue"]=> string(0) "" ["nodeType"]=> int(1) ["parentNode"]=> string(22) "(object value omitted)" ["childNodes"]=> string(22) "(object value omitted)" ["firstChild"]=> NULL ["lastChild"]=> NULL ["previousSibling"]=> string(22) "(object value omitted)" ["nextSibling"]=> string(22) "(object value omitted)" ["attributes"]=> string(22) "(object value omitted)" ["ownerDocument"]=> string(22) "(object value omitted)" ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> string(9) "ReturnRow" ["baseURI"]=> string(20) "file:///W:/ischools/" ["textContent"]=> string(0) "" } 
+0

它会给你什么? – PeeHaa 2012-08-08 15:39:04

+0

[How to parse and process HTML with PHP?](http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php) – PeeHaa 2012-08-08 15:39:16

+0

请编辑你OP信息:) – PeeHaa 2012-08-08 15:45:17

回答

2

在你的情况,我宁愿用simplexml,因为它可以返回一个节点的所有属性在容易迭代格式,并使用XPath找到您是节点兴趣:

$xml = '<'.'?xml version="1.0" encoding="UTF-8"?> 
<Response> 
    <ReturnRow Output1="11" Output2="12" Output3="13" Output4="14" Output5="15" /> 
    <ReturnRow Output1="21" Output2="22" Output3="23" Output4="24" Output5="25" /> 
    <Messages> 
     <Message Code="INFO" Msg="Your request is successful." Type="APP"/> 
    </Messages> 
</Response> 
'; 

$doc = simplexml_load_string($xml); 
$node = $doc->xpath('//ReturnRow'); 
foreach ($node as $book) { 
    foreach ($book->attributes() as $name => $value) { 
     var_dump((string)$name, (string)$value); 
    } 
} 

如果你的输入一直有这些属性可以使用的DOMNode的getAttribute()方法在你的原始代码的循环以获得的值:

foreach ($node as $book) { 
    var_dump($book->getAttribute('Output1'), $book->getAttribute('Output2')); 
} 
+0

感谢您的帮助。第一个代码块工作并转储出值。但第二个代码块导致一个PHP错误。有任何想法吗? – 2012-08-08 16:03:36

+0

我不知道为什么会抛出错误,这是一个完整的演示,应该没有erros工作:http://codepad.viper-7.com/tYNMzI – complex857 2012-08-08 16:08:58