选择一个PHP SimpleXML对象元素,该元素是一个数字
我不确定如何选择“代码”元素-下面的脚本不起作用选择一个PHP SimpleXML对象元素,该元素是一个数字,php,simplexml,Php,Simplexml,我不确定如何选择“代码”元素-下面的脚本不起作用 $reply = SimpleXMLElement Object( [timing] => SimpleXMLElement Object( [code] => SimpleXMLElement Object( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => q6h PRN
$reply = SimpleXMLElement Object(
[timing] => SimpleXMLElement Object(
[code] => SimpleXMLElement Object(
[0] => SimpleXMLElement Object (
[@attributes] => Array (
[value] => q6h PRN
)
)
)
)
我尝试使用:
$timingCode=(字符串)$reply->timing->code['0']->attributes()->value代码>
以及:
$timingCode=(字符串)$reply->timing->code{0'}->attributes()->value代码>
原始XML如下:
我通过使用json\u解码然后json\u编码解决了这一问题,但我觉得它“有黑客味”,所以如果其他人可能建议更好的方法,请尝试一下
$get_timing_code = json_decode(json_encode($reply->timing->code), true);
$med_order_data['timingCode'] = $get_timing_code['0']['0']['@attributes']['value'];
另一个使用@Xorifelse answer修改的选项如下所示:
$med\u order\u data['timingCode']=(字符串)$reply->timing->code->text[0]->属性()->值代码>
这同样有效:
$med_order_data['timingCode']=(字符串)$reply->timing->code->code->text['value']代码>使用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'";
}
也就足够了。如果XML是这样写的:
<Bundle xmlns="http://hl7.org/fhir">
<timing>
<code>
<text value="q6h PRN" />
</code>
</timing>
</Bundle>
请注意,code[0]
表示“第一个元素名为
”,因此您可以同样地编写:
$timingCode = (string) $reply->timing[0]->code[0]->text[0]->attributes()->value;
如果不提供数字,SimpleXML将假定第一个节点,因此即使有倍数,也可以写入:
$timingCode = (string) $reply->timing->code->text->attributes()->value;
更简单地说,如果不处理名称空间,通常不需要->attributes()
方法,只需使用数组键语法访问属性,因此本例中最简单的形式实际上是:
$timingCode = (string) $reply->timing->code->text['value'];
您可以发布实际的XML吗?@user3783243添加在上面的code
不是该示例中的数组<代码>$xml->计时->代码->文本['value']
就可以了。@user3783243-您的建议仍然返回对象SimpleXMLElement对象([0]=>q6h PRN)
-但是它通过使用(string)@DropHit强制转换为字符串来工作,最有可能的是var\u转储($simplexmlobject)
从类魔术方法\uu debuginfo()
输出信息。如果试图echo
一个类,将调用神奇的方法\u tostring()
(如果存在)来返回一个简单字符串,所有这些都在SimpleXML内部处理。已经在使用SimpleXML\u load\u string:)将其放入SimpleXML对象中。您的代码仍然返回对象simplexmlement对象([@attributes]=>Array([value]=>Daily))
,而不是值。但是,请参阅我的更新答案,其中包含您的建议,并稍加修改。是的,它将使用var\u dump()
打印它是一个对象。但是,如果您回显该值,该对象将自动转换为字符串,生成所需的值;使用<代码> ->文本[值] <代码>和<代码> >文本[0 ] [值] <代码>,两个都将使用多个,但您可能会认为比另一个更可读。请不要使用JSON HACK,稍后您会后悔的。而->code->code
将不适用于示例XML,因为
元素中没有额外的
元素。到目前为止,它们都可以工作(包括->code->code)但是,第二个选项是最好的IMHO。您的XML很接近,但与我的问题中的XML不完全相同。@DropHit我从您的问题中复制了它,并添加了空格以便于阅读(因为它对手头的任务没有影响)。如果它与实际的XML不匹配,那么您的问题就错了。
$timingCode = (string) $reply->timing->code->text->attributes()->value;
$timingCode = (string) $reply->timing->code->text['value'];