Если вы используете правильные инструменты для обработки XML, вы найдете задачу довольно простой. Загрузите строку XML в DOMDocument
, а затем создайте процессор XPath (DOMXPath
), чтобы вы могли выполнять запросы к DOM. Вы также можете отказаться от процессора XPath и использовать селекторы parent
и sibling
, но это немного сложнее
$xml='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Response>
<responseCode>000</responseCode>
<inputcheck>
<input>
<paramName>rdono</paramName>
<paramValue>121212</paramValue>
</input>
<input>
<paramName>set</paramName>
<paramValue>7878</paramValue>
</input>
</inputcheck>
<responserst>
<optionst>
<option>
<amountName>Early</amountName>
<amountValue>34000</amountValue>
</option>
<option>
<amountName>Late</amountName>
<amountValue>35000</amountValue>
</option>
</optionst>
<valuno>35000</valuno>
<valunodate>2019-10-15</valunodate>
</responserst>
<additionalInfo>
<info>
<infoName>PC</infoName>
<infoValue>5</infoValue>
</info>
<info>
<infoName>Disconn Tag</infoName>
<infoValue>0</infoValue>
</info>
</additionalInfo>
</Response>';
libxml_use_internal_errors( true );
$dom=new DOMDocument;
$dom->validateOnParse=false;
$dom->recover=true;
$dom->strictErrorChecking=false;
$dom->loadXML( $xml );
$errors = libxml_get_errors();
libxml_clear_errors();
$xp=new DOMXPath( $dom );
$col=$xp->query( '//inputcheck/input' );
function nodevalue( $tag, $parent ){# helper
global $xp;
return $xp->query( $tag, $parent )->item( 0 )->textContent;
}
foreach( $col as $node ){
$name=nodevalue( 'paramName', $node );
$value=nodevalue( 'paramValue', $node );
echo $name, $value;
}
Будет выводиться:
rdono121212set7878