Как получить значение из XML id - PHP - PullRequest
0 голосов
/ 16 января 2020

Буду признателен, если кто-нибудь поможет мне решить эту проблему.

Я получаю это XML, читая файл XML через код де:

$x = simplexml_load_file($link);
$g = $x->attributeGroup;
foreach($g->xpath("//PARAMETER") as $attr){
    var_dump((string)$attr->attributes()->ID);
    var_dump((string)$attr->attributes()->VALUE);
    var_dump((string)$attr); // for text value
}

Мне нужно получить ЗНАЧЕНИЕ внутри ID = sitPag, но я не могу.

Может ли кто-нибудь помочь мне сделать это?

<consulta>
<PARAMETER>
<PARAM ID="CodEmp" VALUE="1234"/>
<PARAM ID="Pedido" VALUE="00010714"/>
<PARAM ID="Valor" VALUE="351,20"/>
<PARAM ID="tipPag" VALUE="02"/>
<PARAM ID="sitPag" VALUE="00"/>
<PARAM ID="ValorPago" VALUE="000000351,20"/>
<PARAM ID="dtPag" VALUE="15012020"/>
<PARAM ID="codAut" VALUE=""/>
<PARAM ID="numId" VALUE=""/>
<PARAM ID="compVend" VALUE=""/>
<PARAM ID="tipCart" VALUE=""/>
</PARAMETER>
</consulta>

После вызова simplexml_load_file () я получаю это:

object(SimpleXMLElement)#3 (1) { ["PARAMETER"]=> object(SimpleXMLElement)#5 (1) { ["PARAM"]=> array(11) { [0]=> object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(6) "CodEmp" ["VALUE"]=> string(26) "1234" } } [1]=> object(SimpleXMLElement)#7 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(6) "Pedido" ["VALUE"]=> string(8) "00010714" } } [2]=> object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(5) "Valor" ["VALUE"]=> string(6) "351,20" } } [3]=> object(SimpleXMLElement)#9 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(6) "tipPag" ["VALUE"]=> string(2) "02" } } [4]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(6) "sitPag" ["VALUE"]=> string(2) "00" } } [5]=> object(SimpleXMLElement)#11 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(9) "ValorPago" ["VALUE"]=> string(12) "000000351,20" } } [6]=> object(SimpleXMLElement)#12 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(5) "dtPag" ["VALUE"]=> string(8) "15012020" } } [7]=> object(SimpleXMLElement)#13 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(6) "codAut" ["VALUE"]=> string(0) "" } } [8]=> object(SimpleXMLElement)#14 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(5) "numId" ["VALUE"]=> string(0) "" } } [9]=> object(SimpleXMLElement)#15 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(8) "compVend" ["VALUE"]=> string(0) "" } } [10]=> object(SimpleXMLElement)#16 (1) { ["@attributes"]=> array(2) { ["ID"]=> string(7) "tipCart" ["VALUE"]=> string(0) "" } } } } }

Ответы [ 3 ]

1 голос
/ 16 января 2020

Это может быть не самым эффективным (вам нужно go через каждый элемент PARAM, пока не будет найден нужный, который может быть много), но это выполнит работу.

$x = simplexml_load_string($xmlString);

foreach($x->PARAMETER->PARAM as $param){

    if((string)$param->attributes()->ID == "sitPag")
    {
        echo (string)$param->attributes()->VALUE;
        break;
    }
}

DEMO

1 голос
/ 16 января 2020

В DOM вы можете использовать DOMXpath ::valu (), чтобы получить значение атрибута напрямую:

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);
$sitPag = $xpath->evaluate('string(/consulta/PARAMETER/PARAM[@ID="sitPag"]/@VALUE)');

var_dump($sitPag);

или

$x = simplexml_load_string($xmlString);

foreach($x->PARAMETER->PARAM as $param){

    if((string)$param->attributes()->ID == "sitPag")
    {
        echo (string)$param->attributes()->VALUE;
        break;
    }
}
0 голосов
/ 16 января 2020

Используйте выражение Xpath для извлечения узлов или значений. SimpleXMLElement::xpath() возвращает массив экземпляров SimpleXMLElement.

$consulta = new SimpleXMLElement($xml);
$params = $consulta->xpath('PARAMETER/PARAM[@ID="sitPag"]');
$sitPag = isset($params[0]) ? (string)$params[0]['VALUE'] : '';

var_dump($sitPag);

В DOM вы можете использовать DOMXpath::evaluate() для непосредственного получения значения атрибута:

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);
$sitPag = $xpath->evaluate('string(/consulta/PARAMETER/PARAM[@ID="sitPag"]/@VALUE)');

var_dump($sitPag);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...