我有一个从dB导出的复杂XML。感谢Hakre's answer to my post我现在可以将XML(使用PHP)转换为希望的数组。
将XML转换为数组几乎是完美的,但仍有一个问题我想解决。
我正在研究的XML部分如下:
<comma>
<num><num>
<alinea>Lorem ipsum...</alinea>
</comma>
<comma>
<num></num>
<corpo>dolor sit amet...</corpo>
</comma>
不要问我为什么,但正如您从这段摘录中看到的那样,有时候comma
的孩子是alinea
,有时孩子是corpo
。
现在我可以使用Hakre's code将上面的XML摘录转换为数组:
<commi expr="a:comma">
<num_alinea expr="concat(a:num, a:alinea)"/>
</commi>
但这只会获得alinea
标记,因此我必须将其更改为:
<commi expr="a:comma">
<num_alinea expr="string(a:alinea)"/>
<num_corpo expr="string(a:corpo)"/>
</commi>
上面的代码可以工作,但生成的数组将输出如下:
Array
(
[num_alinea] => Lorem ipsum...
[num_corpo] =>
)
或
Array
(
[num_alinea] =>
[num_corpo] => dolor sit amet...
)
num_alinea
或num_corpo
为空或取消,具体取决于XML中标记alinea
或corpo
的存在。
我可以在上面的XML expr
中添加条件语句吗?我想我必须使用这样的东西:
<text expr="boolean(a:alinea)"/>
但我不知道如何指示XPath说:
"if exists node [alinea] then get its content, if exist node [corpo] then get its content".
我不确定关于expr
标记中表达式的来源。这些XPath表达式?哪里可以找到更多关于它们的信息?是否有手册/教程或仅仅是要学习的陈述列表?