首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php xpath根据两个属性(edit)及其父属性的值选择节点

php xpath根据两个属性(edit)及其父属性的值选择节点
EN

Stack Overflow用户
提问于 2013-03-01 19:53:56
回答 1查看 1.7K关注 0票数 0

xpath 1.0 -我必须改变方法,因为XML已经改变了。

我需要拉起

代码语言:javascript
复制
t-Attribute FROM the <d>-node WHERE its 
    raw-Attribute = 10 
    AND its parent-node's <scale> gender-Attribute = "*" OR "m" 
    AND the age-Attribute = "*" OR "39-59"  

<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>

对于我最初的目标,Passerby的解决方案效果很好,但我不知道如何解决额外的任务……

代码语言:javascript
复制
$result=$xml->xpath('//scale[@gender="*" or @gender="m"][@age="*" or @age="39-59"]');

这是我最初的任务。

我想从xml中选择节点,其中有两个属性包含特定值。我使用simplexml,所以xpath必须是1.0。

XML代码片段:

代码语言:javascript
复制
<scales>
    <scale id="1" gender="*" age="*">
        <d>5</d>
        <d>9</d>
    </scale>
    <scale id="2" gender="m" age="*">
        <d>3</d>
        <d>0</d>
    </scale>
    <scale id="3" gender="*" age="19-39">
        <d>12</d>
        <d>19</d>
    </scale>
</scales>

现在,我要选择所有具有...的<scale>

代码语言:javascript
复制
(gender="*" OR gender="m") AND (age="*" OR age="39-59")

在我的示例中,使用id=1和id=2

我知道如何使用1个属性,但没有OR / AND条件...

代码语言:javascript
复制
$scales=$xml->xpath("//scale[@gender='m']");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-01 20:02:16

试一试

代码语言:javascript
复制
//scale[@gender="*" or @gender="m"][@age="*" or @age="39-59"]

Live demo

代码语言:javascript
复制
$str=<<<XML
<scales>
    <scale id="1" gender="*" age="*">
        <d>5</d>
        <d>9</d>
    </scale>
    <scale id="2" gender="m" age="*">
        <d>3</d>
        <d>0</d>
    </scale>
    <scale id="3" gender="*" age="19-39">
        <d>12</d>
        <d>19</d>
    </scale>
</scales>
XML;
$xml=simplexml_load_string($str);
$result=$xml->xpath('//scale[@gender="*" or @gender="m"][@age="*" or @age="39-59"]');
foreach($result as $node)
{
    echo $node->attributes()->id."\n";
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15157134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档