2012-02-27 2 views
10

XML 문서에서 특정 요소를 가져 오는 XPath 쿼리/문자열을 만들려고합니다. id = 38로 요소를 잡으려고 시도하고 있지만 내 코드는 어떤 이유로 든 아무 것도 반환하지 않습니다.XPath 특정 id 값을 가진 요소를 가져 오는 문자열

내 코드 &을 보면 내 XML 파일의 구성에서 id = 38로 요소를 가져 오는 데 필요한 XPath를 알 수 있습니까?

내 코드는 다음과 같습니다

<courseg> 
    <group isempty="False" isbranch="true" id="1" name="abc"> 
     <group isempty="False" isbranch="true" id="38" name="def"></group> 
    </group> 
</courseg> 

답변

19

당신이 여기

//*[@id='38'] 

가 함께 예입니다 필요한 XPath에 다음 XML이 구성되어

XmlDocument xdoc = new XmlDocument(); 
xdoc.Load(getProductURL()); 
XmlNode node = xdoc.DocumentElement.SelectSingleNode("id('38')"); 

// node always is null for some reason? 

방법은 매우처럼 X 문서 :

3

사용이 XPath 쿼리 : 그것은 id 속성을 가진 모든 노드를 선택

//*[@id = 38] 

38에 같습니다. 좀 더 구체적으로해야하는 경우, 즉 사용 id 속성 group38에 동일 선택이 하나

//group[@id = 38] 
-1

당신이

xdoc.DocumentElement.SelectSingleNode("id('38')" 

당신이 내 자식 노드를 검색 할 XMLDocument로 묻는 언급 이름이 'id'인 루트 노드. 그러나 이상적으로 'id'는 xmlnode가 아닌 속성입니다.

그래서 당신은 ID 값으로 요소를 선택할 것 (38)

+0

틀린. 그것은 id() 함수가하는 것이 아닙니다. –

5

함수 ID ('P38')의 값으로 모든 자식 노드를 갖는 이름 '그룹'과 속성 '아이디'를 얻을 수 //group[@id = '38']을 사용해야합니다 P38의 그러나 이것은 단순히 "id"라는 속성을 의미하지는 않습니다. DTD 또는 스키마에서 유형 ID로 선언 된 속성을의 L합니다. 당신은 DTD 나 스키마를 보여주지 않았고, 당신이 가지고 있지 않은 것으로 의심합니다. ID 속성을 ID 유형으로 선언 한 경우 ID 값이 모두 숫자가 될 수 없기 때문에 문서가 유효하지 않습니다 (기존 SGML 이유로 인해 이름 형식을 취해야 함).

심각한 성능 요구 사항이없는 한 실제로 id() 함수를 사용하지 않는 것이 좋습니다. 그것은 너무 연약합니다. 스키마 나 DTD에 대해 소스 문서의 유효성을 검사 할 때만 작동합니다. XSLT에서는 대신 key()를 사용하십시오. 또는 많은 프로세서는 스키마 나 DTD를 참조하지 않고 속성 이름 xml : id를 '자체 선언'ID 값으로 인식합니다. 프로세서가 지원하는 경우이를 사용합니다.

관련 문제