我不确定如何选择“代码”元素-以下脚本无法正常工作。
$reply = SimpleXMLElement Object(
[timing] => SimpleXMLElement Object(
[code] => SimpleXMLElement Object(
[0] => SimpleXMLElement Object (
[@attributes] => Array (
[value] => q6h PRN
)
)
)
)
我尝试使用:
$timingCode = (string) $reply->timing->code['0']->attributes()->value;
以及:
$timingCode = (string) $reply->timing->code{'0'}->attributes()->value;
下面的原始XML:
<Bundle xmlns="http://hl7.org/fhir"><timing><code><text value="q6h PRN" /></code></timing></Bundle>
答案 0 :(得分:1)
仅使用XML解析器怎么样?
$str = '<Bundle xmlns="http://hl7.org/fhir"><timing><code><text value="q6h PRN" /></code></timing></Bundle>';
$xml = simplexml_load_string($str);
foreach($xml->timing->code->text[0]->attributes() as $a => $b) {
echo "my key is '$a' and the value is '$b'";
}
但是由于它是一个奇异值:
echo $xml->timing->code->text[0]->attributes(); // echo the value of the first attribute of text, can be used in iteration.
echo $xml->timing->code->text['value']; // This uses the first element found and gets the value attribute.
echo $xml->timing->code->text[0]['value']; // This uses the first element found and make sure the first "text" element is used to get the value attribute from.
也足够了。
答案 1 :(得分:0)
我通过使用json_decode然后使用json_encode来解决此问题,但是对我来说,这是“ hacky”,因此,如果其他人可能会建议一种更好的方法,请尝试使用它。
$get_timing_code = json_decode(json_encode($reply->timing->code), true);
$med_order_data['timingCode'] = $get_timing_code['0']['0']['@attributes']['value'];
另一个使用@Xorifelse答案修改的选项如下:
$med_order_data['timingCode'] = (string) $reply->timing->code->text[0]->attributes()->value;
这也可以:
$med_order_data['timingCode'] = (string) $reply->timing->code->code->text['value'];
答案 2 :(得分:0)
如果XML是书面形式:
return
然后您的第一次尝试已经结束,但是您缺少对<Bundle xmlns="http://hl7.org/fhir">
<timing>
<code>
<text value="q6h PRN" />
</code>
</timing>
</Bundle>
节点的引用,因此它必须为:
text
请注意,$timingCode = (string) $reply->timing->code[0]->text->attributes()->value;
的意思是“第一个称为code[0]
的元素”,因此您可以这样写:
<code>
如果您不提供数字,SimpleXML将采用第一个节点,因此,即使有多个,您也可以编写:
$timingCode = (string) $reply->timing[0]->code[0]->text[0]->attributes()->value;
更简单地说,如果您不处理名称空间,通常不需要$timingCode = (string) $reply->timing->code->text->attributes()->value;
方法,只需使用数组键语法访问属性,因此在这种情况下,最简单的形式实际上是:
->attributes()