xslt 1.0을 사용하고 있으며 노드 집합 함수를 사용해야한다는 두 변수의 조합이 필요합니다.두 개의 노드 집합 결과가 결합되어 중복 된 집합 구성원이됩니다.
아래의 테스트 사례는이 노드를 포함하는 집합을 가진 단일 노드의 공용체를 만듭니다. A가 B를 포함하기 때문에, 조합 연산은 B를 반환해야합니다. 그러나 중복 된 A를 가진 새로운 세트를 얻습니다.
xpath를 직접 사용하면 공용체가 예상대로 작동합니다. 변수와 노드 집합 함수를 사용하면 예기치 않은 상황에 직면하게됩니다. 내 시나리오에서는 노드 집합을 사용해야합니다. 내가 할 수있는만큼 테스트 케이스를 단순화했다.
이 XML 내용이다 :
<?xml version="1.0" encoding="utf-8" ?>
<root>
<event>
<id>3</id>
<eventType>TYPE1</eventType>
</event>
<event>
<id>2</id>
<eventType>TYPE2</eventType>
<parent>3</parent>
</event>
<event>
<id>1</id>
<eventType>TYPE2</eventType>
<parent>3</parent>
</event>
</root>
이는 XSLT이다 :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:ext="http://exslt.org/common"
exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="t2-events">
<xsl:copy-of
select="root/event
[eventType = 'TYPE2' and parent = '3']"/>
</xsl:variable>
<xsl:variable name="specific-t2">
<xsl:copy-of
select="root/event
[eventType = 'TYPE2' and id = '2']"/>
</xsl:variable>
<DEBUG>
<results>
<xsl:variable name="dummy"
select="root/event
[eventType = 'TYPE2']
|
root/event[id = '2']"/>
<xsl:variable name="dummy2"
select="ext:node-set($t2-events)
| ext:node-set($specific-t2) "/>
<xsl:comment>Works as expected</xsl:comment>
<dummy>
<xsl:copy-of select="$dummy"/>
</dummy>
<dummy2>
<xsl:comment>There are 3 elements here, where we should have 2</xsl:comment>
<xsl:copy-of select="$dummy2"/>
</dummy2>
</results>
</DEBUG>
</xsl:template>
</xsl:stylesheet>
가 어떻게 노드 집합()가 호출이에 노조를 적용합니까?
감사합니다. 나는 이것이 내가 가진 문제라고 생각한다 : 나의 원래 코드는 또한 xsl : copy-of를 사용한다. 내 코드를 사용하여 사본을 제거 할 수 있는지 확인합니다. – mahonya