1

xml からノードを選択する必要があります。条件は以下を参照してください。私は simplexml を使用しているため、xpath は 1.0 である必要があります。

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>

今、私tはノードの -Attributeを選択したいと思い<d>ます...

 raw="10" AND scid="hi"

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

そして、その親ノード<scale>には...

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

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

simplexml-object から 1 つの xpath-statement でこれを取得したいと思います$xml

4

2 に答える 2

4

2 つの XPath クエリを組み合わせるだけです...

ライブデモ

$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;
}

出力し76ます。

于 2013-03-03T04:24:26.360 に答える
0

わかりましたxpathへのクイックリードは、このような属性の一致を行うことができるようです

 $path = "(scale[@gender=\"*\"]|scale[@gender=\"m\"]) & (scale[@age=\"*\"]|scale[@age=\"39-59\"])";
 $scale= $xml->xpath($path);

これにより、必要な実際のスケール タグが返されます。次に、返された $scale 内のタグを foreach ループし、次のようなものを使用して標準属性を取得できます (正確ではなく正しい概念に注意してください)。

foreach($scale->d[0]->attributes() as $a => $b => $c) {
    echo "t=$c\"\n";
}
于 2013-03-01T13:35:32.373 に答える