SimpleXML,通过搜索值查找父节点

时间:2014-07-28 11:55:56

标签: php xml xpath simplexml key-value

我下载了一个法语 - >英语词典,用英语翻译法语请求(一个单词请求)。

例如,用户键入" voiture" (搜索输入中的汽车)将翻译成" car"和" car"将在我的数据库中搜索(对用户不可见,他认为正在寻找" voiture")。

所以这是一个词典:

SimpleXMLElement Object
(
[entry] => Array
    (
        ...
        ... 
        [7] => SimpleXMLElement Object
            (
                [form] => SimpleXMLElement Object
                    (
                        [orth] => ADN
                        [pron] => ad
                    )

                [gramGrp] => SimpleXMLElement Object
                    (
                        [pos] => n
                        [gen] => masc
                    )

                [sense] => SimpleXMLElement Object
                    (
                        [def] => DNA
                    )
            )
        [8] => SimpleXMLElement Object
            (
                [form] => SimpleXMLElement Object
                    (
                        [orth] => Abkhasie
                        [pron] => abkazi
                    )

                [gramGrp] => SimpleXMLElement Object
                    (
                        [pos] => n
                    )

                [sense] => SimpleXMLElement Object
                    (
                        [def] => Abkhazia
                    )
            )
            ...

所以,[orth]包含法语单词,[def]包含英语翻译。如果[orth]的值存在,我会知道如何搜索,如果该值存在,则返回SimpleXMLElement对象中[def]的值。

1 个答案:

答案 0 :(得分:2)

这样的事情就足够了。我已经在你的帖子中嘲笑了XML,因为对原始结构不太确定,但你应该了解xpath查询:

$languageXml = <<<XML
    <entries>
        <entry>
            <form>
                <orth>ADN</orth>
            </form>
            <sense>
                <def>DNA</def>
            </sense>
        </entry>
        <entry>
            <form>
                <orth>poisson</orth>
            </form>
            <sense>
                <def>fish</def>
            </sense>
        </entry>
        <entry>
            <form>
                <orth>voiture</orth>
            </form>
            <sense>
                <def>car</def>
            </sense>
        </entry>
    </entries>
XML;

$xml = new SimpleXMLElement($languageXml);    
$searchTerm = 'voiture';

if($result = $xml->xpath("entry/form/orth[.='$searchTerm']/../../sense")) {
    echo $result[0]->def;
};