2012-08-30 5 views
3

XML 노드에 텍스트가 포함되어 있는지 또는 빈 노드 만 포함되어 있는지 어떻게 확인할 수 있습니까?XML 노드에 텍스트가 포함되어 있는지 확인하는 방법

예 : 이제 우리는 다음과 같은 XML 있다고 가정 해 봅시다 : 다른 XML에서

<text> 
    <p> </p> 
    <p> </p> 
</text> 

합니다 (P 태그 사이의 공백을 참고)

을, 우리는 다음과 같은 XML이 :

<text> 
    <p>Hello World!</p> 
</text> 

두 번째 예제에서는 텍스트가 포함되어 있지만 첫 번째 예제에는 빈 노드가 포함되어 있기 때문에 두 번째 예제에서는 테스트가 통과되지만 첫 번째 예제에서는 그렇지 않은 것이 좋습니다.

쉽게 얻을 수있는 방법이 있습니까?

(I는 XSLT 2.0을 사용합니다.)

답변

1

. 다른 말로하면 이것은 공백이있는 예 p 요소가 완전히 비어있는 것과 동일하게 취급된다는 의미입니다. 예를 들어 text[p/text()]과 일치하는 템플릿은 두 번째 예의 text 요소와 일치하지만 p 개의 자식이 모두 비어 있거나 공백 만 포함하는 템플릿과 일치하지 않습니다.

5

내가 normalize-space 당신이, 예를 들어, 원하는 것을 생각 이 '통과'됩니다

<xsl:if test="normalize-space(/text/p) != ''"> 
    ... 
</xsl:if> 

normalize-space 트림 모든 선도하고 두 번째 예제 뒤에 텍스트를두고 있지만 빈 비교할 수 있도록 첫 번째 예에서 모든 문자를 제거 할 문자열에서 공백을 후행 문자열 ''.

또한 여러 공백 문자를 연속적으로 하나의 문자로 압축하므로 예를 들어 hello<space><space><space>therehello<space>there이됩니다. 그런 다음 파서가 완전히 공백으로 구성하여 입력 문서에 텍스트 노드를 무시합니다 스타일 시트의 상단에

<xsl:strip-space elements="*"/> 

을 넣으면

http://www.w3.org/TR/xpath/#function-normalize-space (XPath는 1)

7

사용 :

p[normalize-space()] 

이 문자열 값 빈 문자열 또는 공백 전용 문자열이 아닌 컨텍스트 (현재) 노드의 p 아이를 선택합니다.

관련 문제