Мы интегрируемся с openrs, и они по-прежнему работают с xml, что ужасно: (
Вот возвращенный XML ответ:
<?xml version='1.0' encoding="UTF-8" standalone="no" ?>
<!DOCTYPE OPS_envelope SYSTEM "ops.dtd">
<OPS_envelope>
<header>
<version>0.9</version>
</header>
<body>
<data_block>
<dt_assoc>
<item key="action">REPLY</item>
<item key="attributes">
<dt_assoc>
<item key="status">available</item>
</dt_assoc>
</item>
<item key="is_success">1</item>
<item key="response_text">Domain available</item>
<item key="response_code">210</item>
<item key="protocol">XCP</item>
<item key="object">DOMAIN</item>
</dt_assoc>
</data_block>
</body>
</OPS_envelope>
Я пытаюсь получить значение элемента:
<item key="response_code">210</item>
поэтому в этом примере пытаемся получить значение 210.
Используя xpath, я могу получить запрос пути , запустите al oop и получите значение следующим образом:
$xml = $r->xml;
$code = $xml->xpath('//item');
foreach($code AS $i) {
if($i->attributes()->key == "response_code") {
$code = $i;
}
}
if(isset($code)) {
// We got a code!
echo $code;
}
exit;
Это, однако, кажется очень неэффективным, и я просто не могу смириться с тем, что это лучший способ получить его. Я видел несколько хаков, в которых вы преобразовать xml с помощью json_decode (json_encode ($ xml)), который почти возвращает работоспособную строку json, но, поскольку есть ряд элементов, называемых item, я вынужден работать с массивом numeri c, который может не всегда представляйте правильное значение как правильный элемент массива.
Я застрял между камнем и наковальней или есть лучший способ получить значение?
EDIT
Кажется, я могу попробовать что-то вроде этого: * 102 2 *
$xml->xpath("//item[@key='response_code']")[0];
Однако вышеизложенное предполагает, что будет элемент с соответствующим атрибутом, называемым «response_code» - я мог бы сначала сделать «is_array» для значения, прежде чем предполагать, что значение установлено?