노드 값이 숫자인지 XPath 테스트
XPath를 사용하여 노드 값이 숫자인지 어떻게 확인할 수 있습니까?
어떤 아이디어?
NaN 에 대해 값을 테스트합니다 .
<xsl:if test="string(number(myNode)) != 'NaN'">
<!-- myNode is a number -->
</xsl:if>
이것은 더 짧은 버전입니다 ( @Alejandro 감사 합니다 ) :
<xsl:if test="number(myNode) = myNode">
<!-- myNode is a number -->
</xsl:if>
변수에 포함 된 값을 숫자 $v
로 사용할 수 있는지 테스트하는 가장 짧은 방법 은 다음과 가변 합니다.
number($v) = number($v)
$v
위의 값을 테스트하려는 목적으로 만 대체 합니다.
설명 :
number($v) = number($v)
이 $v
숫자이거나 숫자를보다 많이 이면 분명히 사실 입니다.
a number(true())
는 1이고 number(false)
0 이기 때문에 부울 값에 마찬가지 입니다.
때마다 숫자 $v
로 사용할 수 없습니다, 다음 number($v)
NaN이있다
NaN은 자체로도 다른 값과 동일하지 않습니다.
따라서 위의 식은 값을 숫자 $v
로 사용할 수있는 경우 에만 true 이고 이름은 false입니다.
XPath 2.0에는 사용할 수있는 놀라운 유형 테스트 연산자가 있습니다.
<xsl:if test="$number castable as xs:double">
<!-- implementation -->
</xsl:if>
나는 또 다른 대안을 제공하는 것이 아니라 문제에 대한 "메타 뷰"를 제공합니다.
Oded와 Dimitre Novatchev가 이미 제공 한 내용은 무엇인지 사람들이 "값은 숫자입니다"라는 구절에서 실제로 의미 할 수있는 오류가 무엇입니까?
어떤면에서 "수치 값을 어떻게 표현하고 싶습니까?"라는 기괴하게 들리는 질문 에이 모든 것이 다가옵니다.
XPath 함수 number()
는
- 가능한 선행 또는 후행 공백
- 음수 값에서만 선행 기호 문자
- 숫자 구분 기호로서의 점 (정수의 경우 선택 사항)
- [0-9] 범위의 다른 모든 문자
여기에는 숫자 값에 대한 것이 없습니다.
- 지수 형식으로 표시됩니다 (예 : 12.3E45).
- 양수 값에 대한 부호 문자를 포함 할 수 있습니다.
- 양수와 음수 0을 구분합니다
- 양수 또는 음수 무한대 값 포함
이것은 단순한 기준이 아닙니다. 스키마에 따라 유효한 xs:float
값인 컨텐츠가있는 요소 는 언급 된 특성을 포함 할 수 있습니다. 그러나 number()
값을 반환합니다 NaN
.
따라서 "노드 값이 숫자 인 경우 XPath로 어떻게 확인할 수 있습니까?"라는 질문에 답하십시오. "이미 언급 된 솔루션을 사용하여 "단일 XPath 1.0 사용하여 number()
사용할 수 없습니다 "입니다. 보관 수있는 가능한 숫자 형식에 대해 생각하고 필요한 경우 유효성 검사 / 숫자 구문 분석을 방지하는 논리를 작성하십시오. 예를 들어 XSLT 처리 내에서 적절한 추가 템플릿을 거의 사용하지 않고 작업을 수행 할 수 있습니다.
추신. 0이 아닌 숫자에만 관심이 있고 가장 짧은 테스트는
<xsl:if test="number(myNode)">
<!-- myNode is a non-zero number -->
</xsl:if>
내가 매우 유용하다고 생각하는 것은 다음과 가변적이다.
<xsl:choose>
<xsl:when test="not(number(myNode))">
<!-- myNode is a not a number or empty(NaN) or zero -->
</xsl:when>
<xsl:otherwise>
<!-- myNode is a number (!= zero) -->
</xsl:otherwise>
</xsl:choose>
항상 다음과 같이 사용할 수 있습니다.
string(//Sesscode) castable as xs:decimal
castable은 W3C에 의해 여기에 문서화되어 있습니다 .
저는 숫자 인 01을 다루었습니다.
string(number($v)) != string($v)
분리를
참고 URL : https://stackoverflow.com/questions/3854345/xpath-test-if-node-value-is-number
'IT' 카테고리의 다른 글
DB에서 캐스케이드 제거와 고아 제거의 차이점은 무엇입니까? (0) | 2020.09.13 |
---|---|
JavaScript에서 x, y 좌표를 사용하여 클릭을 시뮬레이션하는 방법은 무엇입니까? (0) | 2020.09.13 |
numpy 배열로 보시겠습니까? (0) | 2020.09.13 |
Sass에서 @include 대 @extend 사용? (0) | 2020.09.12 |
lucene은 문서를 어떻게 설치 색인? (0) | 2020.09.12 |