我尝试创建一个可以在 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/