PHP XPath 查询 XML?

标签 php xml xpath

我尝试创建一个可以在 XML 文档中搜索特定鱼类的 PHP 文件。这是我写的:

$FISH_NAME = $_POST["fish_name"];
$LOCATION = $_POST["location"];
$STATUS = $_POST["status"];
$EDIBLE = $_POST["edible"];
$SCS_NAME = $_POST["scs_name"];
$COLOR = $_POST["color"];
$FEATURE = $_POST["feature"];


$varsPassed = array(
    $FISH_NAME => "NAME", 
    $LOCATION => "@LOCATION", 
    $STATUS => "STATUS", 
    $EDIBLE => "EDIBLE", 
    $SCS_NAME => "SCS-NAME", 
    $COLOR => "COLORS/COLOR", 
    $FEATURE => "FEATURES/FEATURE"
);

$conditional = "";

function addToCond($varPassed, $tagName) {
    if (!empty($varPassed)) {
        if(!empty($conditional)) {
            $conditional .= " and {$tagName} = '{$varPassed}'";
        }
        else {
            $conditional = "{$tagName} = '{$varPassed}'";
        }
    }
}

foreach($varsPassed as $current_feature => $current_tag_name) {
    addToCond($current_feature, $current_tag_Name);
    echo "{$current_feature}: {$current_tag_name}\n";
}

$query = "/FISHDICT/FISH[@LOCATION = 'REEF']";
echo $query;

$dom = new DOMDocument();
$dom->load('server/fish.xml');
$xpath = new DOMXpath($dom);
$value = $xpath->evaluate($query);
foreach($value as $item) {
    echo "found:  {$item->nodeValue}\n\n";
}

但是这不起作用。我在网页上得到了回响:

Angelfish: NAME : FEATURES/FEATURE /FISHDICT/FISH[@LOCATION = 'REEF']

有人知道为什么它不循环遍历每个 post 变量吗?

XML:

    <FISH location="REEF">
    <NAME>Angelfish</NAME>
    <COLORS>
        <COLOR> Blue </COLOR>
        <COLOR> Green </COLOR>
    </COLORS>
    <FEATURES> 
        <FEATURE> Round head </FEATURE>
        <FEATURE> Crown on head </FEATURE>
        <FEATURE> Tall tail fin </FEATURE>
    </FEATURES>
    <TAGS> 
        <TAG> REEF-FISH </TAG>
        <TAG> MULTICOLORED </TAG>
    </TAGS>
    <STATUS> ENDANGERED </STATUS>
    <DESCRIPTION> This fish is found in reefs and is common throughout Bermuda...</DESCRIPTION>
    <FISHINGLEGAL> FALSE </FISHINGLEGAL> 
    <DIET> 
        <DIETITEM> Algae </DIETITEM>
        <DIETITEM> Sea Plants </DIETITEM>
    </DIET>
    <EDIBLE> FALSE </EDIBLE> 
    <SCS-NAME> Holacanthus ciliaris </SCS-NAME>
</FISH>

最佳答案

从您的输出来看,$varsPassed 数组显然不包含您所期望的内容。为了调试,我会在文件顶部执行 print_r($_POST); 来查看发布值是否符合您的预期。创建该数组后,可能会执行 print_r($varsPassed); 以确保它按预期填充。

顺便说一句,您的函数 addToCond() 正在尝试将值附加到不在函数范围内的变量 $conditional。您应该更改函数以返回一个附加到调用代码中的 $conditional 的值,或者通过引用将 $conditional 传递到函数中。

关于PHP XPath 查询 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29462591/

相关文章:

php - 使用 XPATH 语法匹配文本

python - 以下元素的 XPath 是什么?

php - 如何在 Symfony 3 中模拟 'find' 方法

android - 设计在 Android Studio 预览中完美显示但在真实设备中不显示

php - 将 XML 加载到 SQL 时组契约(Contract)名的 XML 字段

c# - 向元素添加 XML 属性

java - 为什么在 IE 中应该更喜欢使用 CSS 而不是 XPath?

php - 从数据库生成动态复选框遇到困难

php - 如何访问 Laravel API 路由?

用于在 CURLOPT_URL 中传递变量的 php pb