2011-03-13 4 views
1

나는 firexpath를 가지고 있으며 xpath로 작동하지 않는 것 같습니다. 단순한 것조차도 //div 결과를 반환하지 않습니다. 기존 노드를 클릭하고 "XPath 복사"라고 말한 다음 해당 XPath를 필터 입력란에 붙여 넣어도 "노드를 찾을 수 없음"이라고 표시됩니다. //*[name()='div'] 그래도 작동합니다. 네임 스페이스가 없습니까? 여기에 루트 태그 (유효한 XHTML의) 모습입니다 :firexpath를 사용하는 xpath

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" class="ff ff3"> 

내가 FireXPath을위한 지원 포럼을 찾을 수 없습니다, 그래서 여기를 게시하도록하겠습니다.

+0

좋은 질문, +1. 설명과 세 가지 대안에 대해서는 내 대답을 참조하십시오. :) –

+0

많은 가능한 중복 중 하나가 [XPath는 null을 반환합니다 null과 XML을 defaultNamespace] (http://stackoverflow.com/questions/4380006/xpath-is-returning-null-for-xml-with-defaultnamespace) –

+0

참조 firepath에 대한 네임 스페이스 등록이 존재하지 않는 것처럼 보이기 때문에 firepath에 특히 적용됩니다. – zode64

답변

0

나는 firexpath를 사용하지 않았지만 기본 네임 스페이스 xmlns="http://www.w3.org/1999/xhtml"은 xpath가 해당 네임 스페이스로 접두어로 사용되는 요소 내에서 div 요소로 div를 찾지 못하게합니다.

그러므로 firexpath를 사용하여 네임 스페이스를 등록해야합니다. 다음 //div 작업을해야하거나 표현은 표현의 네임 스페이스를 고려하고자한다면 당신은 너무

//*[name()='div' and namespace-uri()='http://www.w3.org/1999/xhtml'] 

편집과 같은 네임 스페이스에 대한 검사 포함 할 수있다,뿐만 아니라 괜찮 :

내가 다운로드 한 firexpath을하는 이제 firepath라고 불리며 네임 스페이스를 등록 할 수 없으므로 name() 메서드를 사용하는 것처럼 보입니다.

0

네임 스페이스를 등록하고 (기본 네임 스페이스의 경우) 모든 요소에 접두어를 붙일 수없는 경우 이름을 XPath 식에 등록 된 접두사로 이 같은 XPath 식 :

경우
/*[name()='x']/*[name()='y']/*[name()='z'] 

, 당신은보다 구체적인 XPath 식을 사용해야합니다 (기본 네임 스페이스보다) 다른 네임 스페이스에 속하는 요소가 있습니다 :

/*[name()='x' and namespace-uri()='http://www.w3.org/1999/xhtml'] 
     /*[name()='y' and namespace-uri()='http://www.w3.org/1999/xhtml'] 
      /*[name()='z' and namespace-uri()='http://www.w3.org/1999/xhtml'] 

당신이 할 수 있다면이 기본 네임 스페이스를 등록하고 접두어가 "p"이면 위의 표현은 이제 더 간단한 표현식과 같습니다.

/p:x/p:y/p:z