2013-07-16 2 views
0

형제 노드에 필드 [@ value = 'SIM 식별 (ICCID)] 필드가있을 때 필드 [@value] . 여러 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); 'Catchable 치명적인 오류가 발생합니다 : 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

관련 문제