xpath 1.0 -我必须改变方法,因为XML已经改变了。
我需要拉起
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的解决方案效果很好,但我不知道如何解决额外的任务……
$result=$xml->xpath('//scale[@gender="*" or @gender="m"][@age="*" or @age="39-59"]');这是我最初的任务。
我想从xml中选择节点,其中有两个属性包含特定值。我使用simplexml,所以xpath必须是1.0。
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>现在,我要选择所有具有...的<scale>。
(gender="*" OR gender="m") AND (age="*" OR age="39-59")在我的示例中,使用id=1和id=2
我知道如何使用1个属性,但没有OR / AND条件...
$scales=$xml->xpath("//scale[@gender='m']");发布于 2013-03-01 20:02:16
试一试
//scale[@gender="*" or @gender="m"][@age="*" or @age="39-59"]Live demo
$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";
}https://stackoverflow.com/questions/15157134
复制相似问题