doufei7516 2016-06-08 21:57
浏览 59
已采纳

php根据其他节点值从xml获取节点值

I have currently an xml file that is formatted as follows:

    <SKUQuestions>
       <SKUQuestion>
          <Tag>FrontCamaraWorks</Tag>
          <Question>Does the front Camera Work?</Question>
          <Answer>Yes</Answer>
       </SKUQuestion>
       <SKUQuestion>
          <Tag>BackCamaraWorks</Tag>
          <Question>Does the Rear Camera Work?</Question>
          <Answer>No</Answer>
       </SKUQuestion>
    </SKUQuestions>

I am currently getting the info from the "answer" nodes by calling where it occurs in the xml for example:

    $qFrontCameraWorks = $data['skuQuestions']->SKUQuestion[4];
    $data['frontCameraWorks'] = str_replace("'", "\'", $qFrontCameraWorks->Answer);

my problem is the xml files don't always come to me with the questions in the same order.

So, I was wanting to figure a way to query within a "SKUquestion" node if the "tag" is one thing then it would return the value of the "answer" node within that same SKUquestion node.

for example if the tag is "FrontCamaraWorks" then $data['frontCameraWorks'] is yes.

  • 写回答

2条回答 默认 最新

  • dongqin5604 2016-06-09 00:21
    关注

    Simply run an XPath query expression. As information, XPath is a declarative language used to reference parts of XML documents. PHP's SimpleXMLElement class can run XPath queries returned in arrays:

    $xmlstr = "<SKUQuestions>
                    <SKUQuestion>
                       <Tag>FrontCamaraWorks</Tag>
                       <Question>Does the front Camera Work?</Question>
                       <Answer>Yes</Answer>
                    </SKUQuestion>
                    <SKUQuestion>
                       <Tag>BackCamaraWorks</Tag>
                       <Question>Does the Rear Camera Work?</Question>
                       <Answer>No</Answer>
                    </SKUQuestion>
                </SKUQuestions>";
    
    # LOAD STRING XML
    $xml = new SimpleXMLElement($xmlstr);
    
    # RUN XPATH QUERY
    $queryResult = $xml->xpath('//SKUQuestion[Tag="FrontCamaraWorks"]/Answer');
    
    # OUTPUT VALUE
    echo $queryResult[0];
    # Yes
    

    Alternatively, you can use PHP's DOMXPath using its query() method which returns a DOMNodelist (not array):

    # LOAD STRING XML
    $xmldoc = new DOMDocument();
    $xmldoc->loadXML($xmlstr);
    
    # INITIALIZE AND RUN QUERY
    $xpathvar = new DOMXPath($xmldoc);    
    $queryResult = $xpathvar->query('//SKUQuestion[Tag="FrontCamaraWorks"]/Answer');
    
    # ITERATE DOM NODE LIST
    foreach($queryResult as $result){
        echo $result->nodeValue;
    }
    # Yes
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮