XPath를 사용하여 XML 파일에서 데이터를 추출하는 응용 프로그램이 있습니다. 해당 XML 소스 파일의 노드가 누락 된 경우 "N/A"값을 리턴하려고합니다 (Oracle NVL 기능과 매우 유사합니다). 트릭은 응용 프로그램이 XSLT를 지원하지 않는다는 것입니다. XPath와 XPath만으로이 작업을하고 싶습니다.XPath에서 누락 된 태그의 값을 만들 수 있습니까?
그럴 수 있습니까?
XPath를 사용하여 XML 파일에서 데이터를 추출하는 응용 프로그램이 있습니다. 해당 XML 소스 파일의 노드가 누락 된 경우 "N/A"값을 리턴하려고합니다 (Oracle NVL 기능과 매우 유사합니다). 트릭은 응용 프로그램이 XSLT를 지원하지 않는다는 것입니다. XPath와 XPath만으로이 작업을하고 싶습니다.XPath에서 누락 된 태그의 값을 만들 수 있습니까?
그럴 수 있습니까?
노드가 존재할 때의 반환 값이 인 경우에만 노드의 문자열 값이며 노드 자체는이 아닙니다. 존재하는 경우는 XPath
substring(concat("N/A", /foo/baz), 4 * number(boolean(/foo/baz)))
는 baz
요소의 문자열 값을 반환합니다 그렇지 않으면 문자열 "N/A".
$null-value
가 null 값 문자열과
$node
노드를 선택하는 식입니다
substring(concat($null-value, $node),
(string-length($null-value) + 1) * number(boolean($node)))
. $node
이 두 개 이상의 노드를 포함하는 노드 집합을 평가할 경우 문자열 값의 첫 번째 노드 인이 사용됩니다.
짧은 대답 : 아니오. XPath 사양의 버전 2에 대해 이러한 함수가 고려되어 명시 적으로 거부되었습니다 (비표준의 Illustrative User-written Functions section 참조).
XPath 1.0을 사용하여 수행 할 수 있습니다. 그렇지 않으면 반환식이 /foo/baz
빈 노드 집합을 반환하는 경우
substring("N/A", 4 * number(boolean(/foo/baz)))
는 "N/A"를 반환합니다, 당신은 foo
이 baz
아이가있는 경우 테스트하려는 경우
<foo>
<bar/>
</foo>
을 말해봐 빈 문자열
는 @jelovirt
내가 올바르게 이해한다면, 우리는 기본 응답과 노드의 값을 연결 한 다음를 설정하는 노드의 존재 여부를 테스트하여 결과 문자열의 정확한 집합을 0 또는 내 기본 문자열 바로 뒤에 오는 위치로 오프셋. 그것은 제가 지금까지 본 언어 중 가장 비뚤어진 꼬임입니다. (나는 그것을 좋아한다!)
당신이 말했던 것을 명백하게하기 위해,이 접근법은 노드가없는 경우가 아니라 노드가없는 경우에 작동한다. 그러나 "number (boolean ($ node))"를 "string-length ($ node)"로 바꾸면 빈 노드 대신 작동합니다. 빈 노드
, 당신은 (여기서 당신은 수 부울에서 주조로 number()
에 전화를 생략 할 수 있습니다 암시한다.)
boolean(string-length($node))
필요한