2013-07-16 50 views
0

我想在兄弟节点有字段时获取字段[@value]属性的内容[@ value ='SIM Identification(ICCID)' 。我需要使用多个xml文档来完成此操作,并且父节点并不总是位于相同的数组位置,所以我需要使用相对路径。根据属性选择一个节点,然后返回兄弟节点属性php

这里是一个xml文档的例子。

 <views> 
     <view name="Summary"> 
     <item> 
      <field name="Subject" value="Date Created" class=""/> 
      <field name="Data" value="6/24/2013 11:06:54 AM" class=""/> 
     </item> 
     <view name="Case Data"> 
     <item> 
      <field name="Subject" value="Case Reference" class=""/> 
     </item> 
     <view name="General Information"> 
     <item> 
      <field name="Attribute" value="Device Name" class=""/> 
      <field name="Data" value="SIM Card" class=""/> 
     </item> 
     <item> 
      <field name="Attribute" value="SIM Identification (ICCID)" class=""/> 
      <field name="Data" value="8935301120426207248" class=""/> 
     </item> 
     </view> 
    </views> 

这是我到目前为止,但不能完全得到它的工作。

$doc = new DOMDocument; 
    $doc->load('../SIMxml/207248.xml'); 
    $xpath = new DOMXPath($doc); 

    $SIM_num_query = "/views/view[@name='General Information']/item [field[@name='Attribute' and @value='SIM Identification (ICCID)' and preceding-sibling::field[@value]]]/"; 

    echo $xpath->query($SIM_num_query),"<br/>"; 

这不行,有什么建议吗?

回答

2

如果它始终是你正在寻找尝试这个以下字段:

"//field[@value='SIM Identification (ICCID)']/following-sibling::field/@value" 

如果该位置不固定,你可以尝试这样的事:

"//field[@value='SIM Identification (ICCID)']/../field[@name='Data']/@value" 
+0

我有麻烦这,你怎么能回声验证xpath查询?我在代码中放了'$ SIM_query =“// field [@ value ='SIM Identification(ICCID)']/following-sibling :: field”;',但是当我尝试'echo $ xpath-> query($ SIM_query);'我得到可捕捉的致命错误:类DOMNodeList的对象无法转换为字符串 – Jim

+0

@Jim:返回值关闭查询是[DOMNodeList](http://php.net/manual/en/class.domnodelist .PHP)。最好的方法就像'foreach($ nl as $ node){echo $ node-> nodeValue,“br />”; \t}'但'echo $ nl-> item(0) - > nodeValue;'也行。 –

+0

谢谢,添加' - > nodeValue'就是我所缺少的。我感谢您的帮助。 – Jim

相关问题