【问题标题】:get element by id and get element by Value xpath in php在php中通过id获取元素并通过Value xpath获取元素
【发布时间】:2015-09-02 06:35:00
【问题描述】:

XML 文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ew-language id="en">
    <global>
        <phrase id="actiondeleted" value="Deleted">
            <child_phrase_1 id="1234" value="numbers">
                <child id="test_id" value="test_value"/>
                <child id="test_id" value="test_value_2"/>
            </child_phrase_1>
        </phrase>
    </global>
</ew-language>

如何通过 ID 和值获取元素,以便元素是唯一的。我尝试了这些

     $parent = ($xpath->query("//*[@id='$previous_tag_id']")&& $xpath->query("//*[@value='$previous_tag_value']"))->item(0);
----------------------AND THIS ONE-----------------------------------
     $parent = $xpath->query("//*[@id='$previous_tag_id']/*@value='$previous_tag_value')"->item(0);
----------------------AND THIS ONE-----------------------------------
 $xpath->query("//*[@id='$previous_tag_id' and @value='$previous_tag_value']");

每种语法都不起作用。

【问题讨论】:

  • //*[@id="test_id" and @value="test_value_2"] 并处理引号。
  • 这个 XML 最初包含数千个元素,我可以用 //*[@id="test_id" 和 @value 替换 //*[@id="test_id" 和 @value="test_value_2"] ="$previous_tag_value"]
  • $xpath-&gt;query("//*[@id='$previous_tag_id' and @value='$previous_tag_value']");
  • 我没有得到你
  • 是的,可以替换。忘了报价。我错了。

标签: php xml parsing domxpath xpathquery


【解决方案1】:

使用//*[@id='$previous_tag_id' and @value='$previous_tag_value'] 应该可以工作,请参阅eval.in 中的演示:

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ew-language id="en">
    <global>
        <phrase id="actiondeleted" value="Deleted">
            <child_phrase_1 id="1234" value="numbers">
                <child id="test_id" value="test_value"/>
                <child id="test_id" value="test_value_2"/>
            </child_phrase_1>
        </phrase>
    </global>
</ew-language>
XML;
$doc = new DOMDocument;
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);
$previous_tag_id = "test_id";
$previous_tag_value = "test_value_2";
$result = $xpath->query("//*[@id='$previous_tag_id' and @value='$previous_tag_value']");
foreach($result as $r)
{
    echo $doc->saveXML($r);
}

输出:

<child id="test_id" value="test_value_2"/>

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2021-02-13
    • 1970-01-01
    • 2020-07-19
    • 2015-04-02
    • 2017-05-26
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多