2011-02-01 4 views
2

XSLT에서 루트가 아닌 노드가없는 xml 파일을 처리 중입니다. 이 경우 HTML 페이지에 특별한 메시지를 출력하고 싶습니다. xml 파일을 처리 할 for-each 요소를 사용하고 있습니다. xml 파일에 실제 노드가 있는지 어떻게 확인합니까?XML 파일에 루트가 아닌 노드가 있는지 확인하려면 어떻게합니까?

+0

좋은 질문입니다. +1. 설명과 원하는 XPath 식을 선택하려면 내 대답을 참조하십시오. :) 정답은 –

답변

4

XML 파일에 노드가 없는지 확인하려면 어떻게합니까? 노드는 어떻게됩니까?

정의에 따르면, 올바른 형식의 XML 문서는 적어도 최상위 요소를 포함합니다.

따라서 모든 XML 문서에는 노드가 포함되어 있습니다. 노드가없는 XML 문서는있을 수 없습니다.

이 질문을 묻는 것으로 이해합니다. "XML 문서의 맨 위 요소에 하위 항목이 없다는 것을 확인하는 방법은 무엇입니까?"

실제로 이것은 XPath 질문입니다. 이 XPath 식 :

/*[not(node())] 

문서의 최상위 요소는 자식 노드 (요소, 텍스트 노드, 처리 명령이나 의견이)가없는 정확히 true()입니다.

최상위 요소에는 여전히 특성이있을 수 있으며 항상 네임 스페이스 노드이 있지만이 두 종류의 노드는 정확히 "하위"노드로 간주되지 않습니다.

/*[not(node()) and not(@*)] 

은 입니다. 최상위 요소에는 자식 노드가없고 속성이없는 경우입니다.

/*[not(*)] 

이 맨 위 요소가 자식 요소 노드가없는 정확히 true()입니다 (하지만 여전히 텍스트 노드 어린이, 처리-명령 아이들이 어린이-노드를 댓글을 달 수 있습니다).

+0

+1. – Flack

+0

+1 정답입니다. 명확한 설명 : OP는 * 루트가 아닌 다른 노드가없는 xml 파일을 처리 중입니다. –

+0

@ 알레한드로 : 감사합니다. 그러나 루트 (노드)는! = 맨 위 요소입니다. 올바른 용어를 사용하는 것이 중요합니다. –

관련 문제