Php 从XML获取特定项
我搜索了网络和stackoverflow档案,没有找到任何真正帮助我解决这个问题的东西 我有以下XML文件Php 从XML获取特定项,php,xml,dom,Php,Xml,Dom,我搜索了网络和stackoverflow档案,没有找到任何真正帮助我解决这个问题的东西 我有以下XML文件 <?xml version="1.0"?> <Results> <Result> <Step>001</Step> <State>1</State> <Complete>true</Complete> </Result> <R
<?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>
001
1.
真的
002
1.
真的
003
1.
假的
我想在步骤的帮助下得到Complete的值。因此,基本上,客户端调用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#
###########
}
}
公共函数getSuccess($step){
$doc=新DOMDocument('1.0');
$doc->formatOutput=true;
$doc->Load(“./API/response.xml”);
//Borat:>>非常成功!getElementsByTagName('Result');
foreach($Borat作为$Result){
###########
#代码在这里#
###########
}
}
我现在正在寻找准确的代码来响应结果
提前谢谢。如果有一个主题解决了我的问题,请告诉我,我将关闭此主题。不知道这是否是解决问题的方法,但您可以尝试以下方法:
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对象([Step]=>002[State]=>1[Complete]=>true)不知道这是否是正确的方法,但您可以尝试以下方法:
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对象([Step]=>002[State]=>1[Complete]=>true)您可以在IF条件下比较Step,并获得所需的任何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');
希望这有帮助。您可以比较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');
希望这有帮助。你能试试这个吗?感谢您的回答,我可以访问步骤和完成,但我希望“在步骤=$step in result中获得完成”。是的,您可以通过在foreach中放置“IF”条件来实现这一点。请检查我下面的答案,看一个例子。你能试试这个吗?感谢您的回答,我可以访问步骤和完成,但我希望“在步骤=$step in result中获得完成”。是的,您可以通过在foreach中放置“IF”条件来实现这一点。请检查我下面的答案以获得一个例子。奇怪的是,当我使用print_r($Result)时,我得到了:simplexmlement对象([Step]=>002[State]=>1[Complete]=>true)欢迎您!我的第一个答案是:)很高兴能帮到+1这个不错的答案,我认为XPath是解决这个问题的方法,提高了可读性。我正要发布与以下XPath类似的东西
“//Result/Complete[../Step='$Step']”
。你的提供了更多的上下文(整个结果节点),我的只返回完整的节点。奇怪的是,当我使用print\r($Result)时,我得到了:simplexmlement对象([Step]=>002[State]=>1[Complete]=>true)你的欢迎!我的第一个答案是:)很高兴能帮到+1这个不错的答案,我认为XPath是解决这个问题的方法,提高了可读性。我正要发布与以下XPath类似的东西“//Result/Complete[../Step='$Step']”
。你的提供了更多的上下文(整个结果节点),我的只返回完整的节点。谢谢,这正是我要找的。谢谢,这正是我要找的。