¿如何用php获取XML的数据?
¿How to get the data of XML with php?
我有下一个问题,在我的代码中我得到一个 XML 格式的 SOAP 响应,所以我想循环它以获取 XML 包含的信息, xml 看起来像这样:
<?php
$xml_response = <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<REPORTES>
DEMO
<REPORTE TIPO="BASIC">
<INVESTIGADO>SOMETHING</INVESTIGADO>
<FECHA>SOMETHING</FECHA>
<HORA>SOMETHING</HORA>
<BASE>SOMETHING
<PERIODO>SOMETHING</PERIODO>
<JUICIO>SOMETHING</JUICIO>
<GRADO>SOMETHING</GRADO>
</BASE>
<GRADO_MAXIMO>SOMETHING</GRADO_MAXIMO>
<CASOS>
<DEFINICION>SOMETHING</DEFINICION>
<TIEMPO>SOMETHING</TIEMPO>
</CASOS>
<PDF_REPORT>SOMETHING</PDF_REPORT>
</REPORTE>
<REPORTE TIPO="DETAIL">
<BASE>SOMETHING
<INFORMACION>
<JUZGADO>SOMETHING</JUZGADO>
<JUZ_NUM>SOMETHING</JUZ_NUM>
<SECRETARIA>SOMETHING</SECRETARIA>
<FECHA_ACU>SOMETHING</FECHA_ACU>
<NUM_BOL>SOMETHING</NUM_BOL>
<FECHA_PUB>SOMETHING</FECHA_PUB>
<RUBRO>SOMETHING</RUBRO>
</INFORMACION>
</BASE>
</REPORTE>
</REPORTES>
EOF;
?>
我正在尝试获取属性“TIPO”的值,因为子项具有不同的结构,问题是当代码打印值时只打印第一个
$xml = simplexml_load_string($xml_response);
foreach ($xml->children()->attributes() as $key => $val) {
echo "Key: " . $key . " value: " . $val . "<br>";
var_dump($xml);
}
代码的输出
object(SimpleXMLElement)#1 (1) { ["REPORTE"]=> array(2) { [0]=> object(SimpleXMLElement)#7 (8)
{ ["@attributes"]=> array(1) { ["TIPO"]=> string(5) "BASIC" } ["INVESTIGADO"]=> string(9)
"SOMETHING" ["FECHA"]=> string(9) "SOMETHING" ["HORA"]=> string(9) "SOMETHING" ["BASE"]=> string(25)
"SOMETHING " ["GRADO_MAXIMO"]=> string(9) "SOMETHING" ["CASOS"]=> object(SimpleXMLElement)#9 (2) {
["DEFINICION"]=> string(9) "SOMETHING" ["TIEMPO"]=> string(9) "SOMETHING" } ["PDF_REPORT"]=>
string(9) "SOMETHING" } [1]=> object(SimpleXMLElement)#8 (2)
{ ["@attributes"]=> array(1)
{ ["TIPO"]=> string(6) "DETAIL" } ["BASE"]=> string(16) "SOMETHING " } } }
Key: TIPO value: BASIC
我做了 var_dumb 以确保所有子项都存在。
最后的问题是...
如何让 foreach 获得子“REPORTES”的属性?
文档并没有具体说明这一点,但您需要在 children 方法上循环,或者在开始循环之前将该值分配给 var。基本上不要链接你的属性方法。然后它将按预期工作。
<?php
$xml = simplexml_load_string($xml_response);
foreach ($xml->children() as $child) {
foreach($child->attributes() as $key => $val) {
echo "Key: " . $key . " value: " . $val . "<br>";
}
}
我有下一个问题,在我的代码中我得到一个 XML 格式的 SOAP 响应,所以我想循环它以获取 XML 包含的信息, xml 看起来像这样:
<?php
$xml_response = <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<REPORTES>
DEMO
<REPORTE TIPO="BASIC">
<INVESTIGADO>SOMETHING</INVESTIGADO>
<FECHA>SOMETHING</FECHA>
<HORA>SOMETHING</HORA>
<BASE>SOMETHING
<PERIODO>SOMETHING</PERIODO>
<JUICIO>SOMETHING</JUICIO>
<GRADO>SOMETHING</GRADO>
</BASE>
<GRADO_MAXIMO>SOMETHING</GRADO_MAXIMO>
<CASOS>
<DEFINICION>SOMETHING</DEFINICION>
<TIEMPO>SOMETHING</TIEMPO>
</CASOS>
<PDF_REPORT>SOMETHING</PDF_REPORT>
</REPORTE>
<REPORTE TIPO="DETAIL">
<BASE>SOMETHING
<INFORMACION>
<JUZGADO>SOMETHING</JUZGADO>
<JUZ_NUM>SOMETHING</JUZ_NUM>
<SECRETARIA>SOMETHING</SECRETARIA>
<FECHA_ACU>SOMETHING</FECHA_ACU>
<NUM_BOL>SOMETHING</NUM_BOL>
<FECHA_PUB>SOMETHING</FECHA_PUB>
<RUBRO>SOMETHING</RUBRO>
</INFORMACION>
</BASE>
</REPORTE>
</REPORTES>
EOF;
?>
我正在尝试获取属性“TIPO”的值,因为子项具有不同的结构,问题是当代码打印值时只打印第一个
$xml = simplexml_load_string($xml_response);
foreach ($xml->children()->attributes() as $key => $val) {
echo "Key: " . $key . " value: " . $val . "<br>";
var_dump($xml);
}
代码的输出
object(SimpleXMLElement)#1 (1) { ["REPORTE"]=> array(2) { [0]=> object(SimpleXMLElement)#7 (8)
{ ["@attributes"]=> array(1) { ["TIPO"]=> string(5) "BASIC" } ["INVESTIGADO"]=> string(9)
"SOMETHING" ["FECHA"]=> string(9) "SOMETHING" ["HORA"]=> string(9) "SOMETHING" ["BASE"]=> string(25)
"SOMETHING " ["GRADO_MAXIMO"]=> string(9) "SOMETHING" ["CASOS"]=> object(SimpleXMLElement)#9 (2) {
["DEFINICION"]=> string(9) "SOMETHING" ["TIEMPO"]=> string(9) "SOMETHING" } ["PDF_REPORT"]=>
string(9) "SOMETHING" } [1]=> object(SimpleXMLElement)#8 (2)
{ ["@attributes"]=> array(1)
{ ["TIPO"]=> string(6) "DETAIL" } ["BASE"]=> string(16) "SOMETHING " } } }
Key: TIPO value: BASIC
我做了 var_dumb 以确保所有子项都存在。 最后的问题是... 如何让 foreach 获得子“REPORTES”的属性?
文档并没有具体说明这一点,但您需要在 children 方法上循环,或者在开始循环之前将该值分配给 var。基本上不要链接你的属性方法。然后它将按预期工作。
<?php
$xml = simplexml_load_string($xml_response);
foreach ($xml->children() as $child) {
foreach($child->attributes() as $key => $val) {
echo "Key: " . $key . " value: " . $val . "<br>";
}
}