从XML获取特定项目

时间:2016-08-04 11:30:28

标签: php xml dom

我搜索了网络和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 结果的确切代码。

提前致谢。如果有一个主题可以解决我的问题,请告诉我,我会关闭这个。

2 个答案:

答案 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');

希望这有帮助。