XML XPath检查节点是否存在...然后

时间:2015-07-17 06:56:28

标签: php xml xpath

我有一个从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_alineanum_corpo为空或取消,具体取决于XML中标记alineacorpo的存在。

我可以在上面的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表达式?哪里可以找到更多关于它们的信息?是否有手册/教程或仅仅是要学习的陈述列表?

0 个答案:

没有答案