2012-03-31 4 views
0

xpath 논리가 잘못된 부분을 볼 수 없습니다.xpath를 사용하여 XML 섹션으로 이동

여기는 transversing 작업을하는 큰 xml 섹션입니다. 내 목표는 내가이와

.SelectNodes("//div/span['pp-headline-item pp-headline-phone']/../..") 

을 사용하여 마스터 XML 파일의 나가 XML의이 덩어리에서 다양한 데이터 포인트를 추출하는 것입니다

<div> 
    <div></div> 
    <span class="pp-headline-item pp-headline-phone"> 
     <span class="telephone" dir="ltr"> 
      <nobr>(732) 562-1312</nobr> 
      <span class="pp-headline-phone-label" style="display:none">()</span> 
     </span>&#8206; 
    </span> 
    <span> &middot; </span> 
    <span class="pp-headline-item pp-headline-authority-page"> 
     <span> 
      <a href="http://maps.google.com/local_url?q=http://www.fed.com/q=07746+pizza"> 
       <span>fed.com</span> 
      </a> 
     </span> 
    </span> 
</div> 

합니다 (html로 민첩성 팩을 사용하여 메신저에주의) 나는 위에서 설명한 모든 섹션을 얻을 것으로 기대하고 있으므로 반복 할 수 있고 웹 사이트, 전화, 주소 같은 것을 추출 할 수 있습니다. ...

문제는 내가 반복 할 때이 노드 세트를 내가 원하는 데이터 포인트에 도달 할 때입니다. 노드 집합은 위에 설명 된 노드 집합이 아닙니다.

내 논리는 nodset으로 최상위 div에서 노드 집합을 추출하고 xpath로 반복 할 때 원하는 데이터 점에 노드 집합을 추출하는 것입니다.

foreach (HtmlNode n in BuizRowsgoogMaps) 
       {      
        //get phone number 
        if (n.SelectSingleNode("span/nobr").InnerHtml != null) 
        { 
         strPhone = n.SelectSingleNode("span/nobr").InnerHtml; 

         //get phone site 
         strSite = n.SelectSingleNode("//span['pp-headline-item pp-headline-authority-page']/span/a/span").InnerHtml; 
        } 
       } 

내가 내 XPath의 내가 원하는 것을 얻을 함께 메쉬 해달라고 생각하지만 난 내 표현의 유효성을 검사 할 때 나는 내 생각을 확인하기 위해 사용 ... 원하는 결과를 얻을 :

내가 이렇게 그것을 할 그것은 지혜의 끝에서 저를 떠나 작품 :

//div/span['pp-headline-item pp-headline-phone']/../../span['pp-headline-item pp-headline-phone']/span/nobr 

답변

1

귀하의 코드는, 당신은 당신의 XPath는 약간의 수정 거의 바로 필요가있다.

foreach (HtmlNode n in BuizRowsgoogMaps) 
{ 
    //get phone number 
    if (n.SelectSingleNode(".//span/nobr").InnerHtml != null) 
    { 
    strPhone = n.SelectSingleNode(".//span/nobr").InnerHtml; 

    //get phone site 
    strSite = n.SelectSingleNode(".//span['pp-headline-item pp-headline-authority-page']/span/a/span").InnerHtml; 
    } 
} 

.//은 xpath가 루트가 아닌 현재 노드에서 일치하도록 지시합니다.

관련 문제