<xsl:for-each>
루프의 컨텍스트에서 XML 문서의 고유 레코드 만 선택해야합니다. Visual Studio에서 XSL 1.0을 사용하도록 제한됩니다. XSLT/XPath에서 고유 레코드 선택
<availList>
<item>
<schDate>2010-06-24</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>13:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-24</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>13:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-25</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>12:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-26</schDate>
<schFrmTime>13:00:00</schFrmTime>
<schToTime>14:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
<item>
<schDate>2010-06-26</schDate>
<schFrmTime>10:00:00</schFrmTime>
<schToTime>12:00:00</schToTime>
<variousOtherElements></variousOtherElements>
</item>
</availList>
고유성
은 세 개의 하위 요소의 값을 기준으로해야합니다schDate
,
schFrmTime
및
schToTime
을. 두 개의 자식 요소 모두에 대해 두 개의
item
요소가 동일한 값을 갖는 경우 중복됩니다. 위의 XML에서
항목 1과 2는입니다. 나머지는 고유합니다. 위에 표시된대로
각 항목에는 비교에 포함하지 않으려는 다른 요소가 포함되어 있습니다. '독창성'은이 세 요소의 요소이어야하며 그 요소만으로 충분합니다.
나는 다음을 통해이 작업을 수행하려고했습니다 :
availList/item[not(schDate = preceding:: schDate and schFrmTime = preceding:: schFrmTime and schToTime = preceding:: schToTime)]
이 뒤에 아이디어는 같은 schDate
, schFrmTime
및 schToTime
아무 앞의 요소가없는 경우 레코드를 선택하는 것입니다. 그러나 출력이 이고 마지막 항목이 누락되었습니다 (). 이는 실제로 내 XPath가 전체 내에서 의 하위 요소 값이 모두 일치하는 항목을 제외하기 때문입니다. 하나의 item
은 마지막 항목의 모든 하위 요소와 일치하지 않지만 각 요소의 값이 다른 항목에 개별적으로 표시되기 때문에 마지막 항목이 제외됩니다.
나는 각 앞의 항목에 대한 연결된 문자열로에 동일한 연결된 값을 모든 하위 값을 비교하여 올바른 결과를 얻을 수 있습니다. 아무도 내가 이것을 할 수있는 방법을 알고 있니?
좋은 질문 (+1). XPath 및 XSLT 솔루션에 대한 내 대답을 참조하십시오. –
key()를 사용하는 방법은 일반적으로 Muenchian 메서드라고합니다. http://www.jenitennison.com/xslt/grouping/muenchian.html –