XSLT가 처음입니다.XSLT의 속성 값을 기반으로 요소를 그룹화하는 방법은 무엇입니까?
다음은 XML입니다.
<Resource resource_id="603">
<Computer full_name="AJAY-2064" remarks="computer key expired."/>
</Resource>
<Resource resource_id="604">
<Computer full_name="AJAY-2070" remarks="computer key expired."/>
</Resource>
<Resource resource_id="602">
<Computer full_name="AJAY-1662" remarks="Not a valid key. "/>
</Resource>
내 요구 사항은 고유 한 발언 수를 얻고 발언을 기반으로 이름을 그룹화하는 것입니다.
(예)
컴퓨터 키 만료 카운트 (2)
아제-2064
아제-2070
하지 유효한 키 (1)
아제-1662
여기에 xsl이 있습니다.
<xsl:variable name="license.computer" select="Resource/ManagedComputer"/>
<xsl:key name="keyComputer" match="$license.computer" use="@remarks"/>
<xsl:for-each select="$license.computer[generate-id() =
generate-id(key('keyComputer', @remarks)[1])]">
<xsl:variable name="license.remarks" select="@remarks"/>
<xsl:for-each select="$license.computer[contains(@remarks,$license.remarks)]">
<xsl:choose>
<xsl:when test="position() mod 2 = 0" >
<tr>
<td bgcolor="#F9F9F9"><xsl:value-of select="@full_name"/></td>
<td bgcolor="#F9F9F9"><xsl:value-of select="@remarks"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr>
<td bgcolor="#FFFFFF"><xsl:value-of select="@full_name"/></td>
<td bgcolor="#FFFFFF"><xsl:value-of select="@remarks"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
하지만 작동하지 않는 것 같습니다. 필요한 경우 해결 방법을 제공하십시오. 디버거에서 xslt를 디버깅 하시겠습니까?
"XSLT에서 그룹화"를 검색하면 많은 조회수가 발생합니다.이 방법은 사용자가 XSLT 1.0 또는 2.0을 사용하고 있는지 여부에 따라 달라집니다. 위 코드는 XSLT 1.0 기술은 "Muenchian grouping"이라고 불리우는 데, 신인을 위해 상당히 마음이 산란합니다.(당신이 이해하지 못하는 예제 코드를 복사하고 수정 한 적이 있다고 생각합니다. 결코 좋은 전략이 아닙니다.) XSLT 2.0에서는 작업을 수행하는 목적으로 설계된 명령 인 xsl : for-each-group이 있기 때문에 훨씬 간단합니다. –
예. 알아. 우리는 XSLT 2.0을 사용하지 않습니다. 따라서, XSLT 1.0 그룹화에 대한 검색. 그리고 그 절차를 생각해 냈습니다. –
네, 그렇게 생각했습니다. 문제는 대부분의 경우 Google에서 작동하는 방식에 대한 설명없이 예제 코드를 찾을 수 있다는 것입니다. 그리고 그것이 어떻게 작동하는지 이해하지 못한다면, 당신은 그것을 바꾸는 난장판을 만들 것입니다. 그것이 작동하는 방법을 찾는 가장 좋은 방법은 책을 사서 예제와 설명을 통해 작업하는 것입니다. 또는 좋은 자습서 사이트를 찾으십시오. –