php loadXML 字符串
php loadXML string
我有一个 xsd 字符串,我需要获取标签状态和标签 itens/seloRecebimento 中的内容并将其放置为 table.
我需要的:
$status = 0; // or 1
itens/seloRecebimento 上的标签内容如下:
- 4 AAA034593 A1B2
- 4 AAA034594 A1B2
下面是 xsd 字符串:
$string = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns4:receberSelosResponse xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://www.tjce.jus.br/selodigital/schemas" xmlns:ns4="http://service.recebimento.selodigital.tjce.jus.br/">
<return>
<cabecalho>
<versao>1.12</versao>
<dataHora>2019-12-30T08:17:17.425-03:00</dataHora>
<ambiente>2</ambiente>
<serventia>
<codigoServentia>000309</codigoServentia>
</serventia>
</cabecalho>
<itens>
<itemSolicitacao>
<sequencial>1</sequencial>
<status>
<codigo>MSG037</codigo>
<status>0</status>
<mensagem>Item da solicitação já foi entregue para serventia.</mensagem>
</status>
<seloRecebimento>
<codigoSelo>
<codigo>4</codigo>
</codigoSelo>
<numeroSerie>AAA034593</numeroSerie>
<validador>A1B2</validador>
</seloRecebimento>
<seloRecebimento>
<codigoSelo>
<codigo>4</codigo>
</codigoSelo>
<numeroSerie>AAA034594</numeroSerie>
<validador>A1B2</validador>
</seloRecebimento>
</itemSolicitacao>
</itens>
</return>
</ns4:receberSelosResponse>
</soap:Body>
</soap:Envelope>';
到目前为止我做了什么:
$domDocument = new DOMDocument();
$domDocument->loadXML($string);
$selos = array();
$selos_r = $domDocument->getElementsByTagName("itens");
foreach($selos_r as $selos_rs){
foreach($selos_rs->childNodes as $valor) {
if($valor instanceof DOMElement) {
array_push($selos, $valor->textContent);
}
}
}
print_r($selos);
结果:
Array ( [0] => 1 MSG037 0 Item da solicitação já foi entregue para serventia. 4 AAA034593 A1B2 4 AAA034594 A1B2 )
目前,您只是转储了所有 DOMElement
内容。此代码使用 XPath 挑选出您想要的位并将它们放入数组中。
每个 XPath 从您作为上下文使用的当前元素开始,并使用 descendant::
确保它获取元素内的数据。还使用 evaluate()
因为这可以 return 字符串值...
$domDocument = new DOMDocument();
$domDocument->loadXML($string);
$xp = new DOMXPath($domDocument);
$selos = array();
$selos_r = $domDocument->getElementsByTagName("itens");
foreach($selos_r as $selos_rs){
$status = $xp->evaluate('string(descendant::status/status)', $selos_rs);
foreach($selos_rs->getElementsByTagName("seloRecebimento") as $s) {
$codigo = $xp->evaluate('string(descendant::codigo)', $s);
$numeroSerie = $xp->evaluate('string(descendant::numeroSerie)', $s);
$validador = $xp->evaluate('string(descendant::validador)', $s);
$selos[] = [$status, $codigo, $numeroSerie, $validador];
}
}
print_r($selos);
我有一个 xsd 字符串,我需要获取标签状态和标签 itens/seloRecebimento 中的内容并将其放置为 table.
我需要的:
$status = 0; // or 1
itens/seloRecebimento 上的标签内容如下:
- 4 AAA034593 A1B2
- 4 AAA034594 A1B2
下面是 xsd 字符串:
$string = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns4:receberSelosResponse xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://www.tjce.jus.br/selodigital/schemas" xmlns:ns4="http://service.recebimento.selodigital.tjce.jus.br/">
<return>
<cabecalho>
<versao>1.12</versao>
<dataHora>2019-12-30T08:17:17.425-03:00</dataHora>
<ambiente>2</ambiente>
<serventia>
<codigoServentia>000309</codigoServentia>
</serventia>
</cabecalho>
<itens>
<itemSolicitacao>
<sequencial>1</sequencial>
<status>
<codigo>MSG037</codigo>
<status>0</status>
<mensagem>Item da solicitação já foi entregue para serventia.</mensagem>
</status>
<seloRecebimento>
<codigoSelo>
<codigo>4</codigo>
</codigoSelo>
<numeroSerie>AAA034593</numeroSerie>
<validador>A1B2</validador>
</seloRecebimento>
<seloRecebimento>
<codigoSelo>
<codigo>4</codigo>
</codigoSelo>
<numeroSerie>AAA034594</numeroSerie>
<validador>A1B2</validador>
</seloRecebimento>
</itemSolicitacao>
</itens>
</return>
</ns4:receberSelosResponse>
</soap:Body>
</soap:Envelope>';
到目前为止我做了什么:
$domDocument = new DOMDocument();
$domDocument->loadXML($string);
$selos = array();
$selos_r = $domDocument->getElementsByTagName("itens");
foreach($selos_r as $selos_rs){
foreach($selos_rs->childNodes as $valor) {
if($valor instanceof DOMElement) {
array_push($selos, $valor->textContent);
}
}
}
print_r($selos);
结果:
Array ( [0] => 1 MSG037 0 Item da solicitação já foi entregue para serventia. 4 AAA034593 A1B2 4 AAA034594 A1B2 )
目前,您只是转储了所有 DOMElement
内容。此代码使用 XPath 挑选出您想要的位并将它们放入数组中。
每个 XPath 从您作为上下文使用的当前元素开始,并使用 descendant::
确保它获取元素内的数据。还使用 evaluate()
因为这可以 return 字符串值...
$domDocument = new DOMDocument();
$domDocument->loadXML($string);
$xp = new DOMXPath($domDocument);
$selos = array();
$selos_r = $domDocument->getElementsByTagName("itens");
foreach($selos_r as $selos_rs){
$status = $xp->evaluate('string(descendant::status/status)', $selos_rs);
foreach($selos_rs->getElementsByTagName("seloRecebimento") as $s) {
$codigo = $xp->evaluate('string(descendant::codigo)', $s);
$numeroSerie = $xp->evaluate('string(descendant::numeroSerie)', $s);
$validador = $xp->evaluate('string(descendant::validador)', $s);
$selos[] = [$status, $codigo, $numeroSerie, $validador];
}
}
print_r($selos);