doukui9491 2013-03-01 12:55
浏览 53
已采纳

php xpath基于多个属性和父属性检索属性值

I need to select nodes from xml, conditions see below. I am using simplexml, so the xpath has to be 1.0.

XML snippet:

<scales>
    <scale id="1" gender="*" age="*">
        <d scid="hi" raw="10" t="76" />
        <d scid="pn" raw="12" t="80" />
    </scale>
    <scale id="2" gender="m" age="*">
        <d scid="hi" raw="8" t="79" />
        <d scid="pn" raw="2" t="50" />
    </scale>
    <scale id="3" gender="*" age="19-39">
        <d scid="hi" raw="0" t="48" />
        <d scid="pn" raw="10" t="49" />
    </scale>
</scales>

Now, I want to select the t-Attribute of a <d> node that has...

 raw="10" AND scid="hi"

 $result=$xml->xpath('//d[@scid="hi"][@raw="10"]/@t');

And its parent-node <scale> has...

(gender="*" OR gender="m") AND (age="*" OR age="39-59")

$result=$xml->xpath('//scale[@gender="*" or @gender="m"][@age="*" or @age="39-59"]');

I'd like to get this with 1 xpath-statement from my simplexml-object $xml.

  • 写回答

2条回答 默认 最新

  • dsuvs66406 2013-03-03 04:24
    关注

    Just combine your two XPath query...

    Live demo

    $str=<<<XML
    <scales>
        <scale id="1" gender="*" age="*">
            <d scid="hi" raw="10" t="76" />
            <d scid="pn" raw="12" t="80" />
        </scale>
        <scale id="2" gender="m" age="*">
            <d scid="hi" raw="8" t="79" />
            <d scid="pn" raw="2" t="50" />
        </scale>
        <scale id="3" gender="*" age="19-39">
            <d scid="hi" raw="0" t="48" />
            <d scid="pn" raw="10" t="49" />
        </scale>
    </scales>
    XML;
    $xml=simplexml_load_string($str);
    foreach($xml->xpath('//scale[@gender="*" or @gender="m"][@age="*" or @age="39-59"]/d[@scid="hi"][@raw="10"]/@t') as $t)
    {
        echo $t;
    }
    

    Outputs 76.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)