我搜索了网络和stackoverflow存档,但没有发现任何真正帮助我解决这个问题的内容。
我有以下XML文件
<?xml version="1.0"?>
<Results>
<Result>
<Step>001</Step>
<State>1</State>
<Complete>true</Complete>
</Result>
<Result>
<Step>002</Step>
<State>1</State>
<Complete>true</Complete>
</Result>
<Result>
<Step>003</Step>
<State>1</State>
<Complete>false</Complete>
</Result>
</Results>
我希望借助 Step 获得完整的价值。所以基本上,客户端调用getSuccess( param ),其中 param 是输入的步骤,例如 002 。然后我想获得这个特定数组(或结果树)的值。我的代码现在看起来像这样
public function getSuccess($step){
$doc = new DOMDocument('1.0');
$doc->formatOutput = true;
$doc->Load("./API/response.xml");
// Borat: >>Great Success!<<
$Borat = $doc->getElementsByTagName('Result');
foreach ($Borat as $Result) {
###########
#CODE HERE#
###########
}
}
我现在正在寻找 echo 结果的确切代码。
提前致谢。如果有一个主题可以解决我的问题,请告诉我,我会关闭这个。
答案 0 :(得分:3)
不知道它是否可行,但你可以试试这个:
public function getSuccess($step)
{
$xml_string = file_get_contents("./API/response.xml");
$xml_data = new SimpleXMLElement($xml_string);
// Search for the parent bij $step
$nodes = $xml_data->xpath('//Results/Result/Step[.="'.$step.'"]/parent::*');
return $nodes[0];
}
$Result = getSuccess('002');
print_r($Result);
应该输出:SimpleXMLElement Object([Step] =&gt; 002 [State] =&gt; 1 [Complete] =&gt; true)
答案 1 :(得分:3)
您可以比较IF条件中的步骤并获取所需的任何XML节点。
例如:我在这里获得'州'节点。
function getSuccess($step) {
if (file_exists("./response.xml")) {
$xml = simplexml_load_file("./response.xml");
foreach ($xml as $Result) {
if ($step == $Result->Step) {
$State = $Result->State;
return $State;
}
}
} else {
exit('Failed to open test.xml.');
}
}
echo getSuccess('001');
希望这有帮助。