파일 메이커 데이터베이스에서 레코드를 그룹화하려고합니다. XSLT를 사용하여 변환하는 옵션을 사용하여 XML로 내보내고 있습니다.XSLT에서 노드 값을 기준으로 XML 요소를 그룹화하는 방법은 무엇입니까?
나는 다른 게시물을 검색하고 읽었으며, 내가하고 싶은 것을 정확하게 커버하지는 않는다고 생각합니다.
는 XML의 발췌 :
<?xml version="1.0" encoding="UTF-8"?>
<!-- This grammar has been deprecated - use FMPXMLRESULT instead -->
<FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult">
<ERRORCODE>0</ERRORCODE>
<DATABASE>Artpostersnbbs.fp7</DATABASE>
<LAYOUT />
<ROW MODID="19" RECORDID="11116">
<Art_Type>Poster</Art_Type>
<Location>1</Location>
<Line1>ELEVATOR
MACHINE
ROOM
107</Line1>
</ROW>
<ROW MODID="19" RECORDID="11116">
<Art_Type>Poster</Art_Type>
<Location>2</Location>
<Line1>ELEVATOR
MACHINE
ROOM
107</Line1>
</ROW>
<ROW MODID="19" RECORDID="11116">
<Art_Type>Poster</Art_Type>
<Location>3</Location>
<Line1>ELEVATOR
MACHINE
ROOM
107</Line1>
</ROW>
</FMPDSORESULT>
내가 그룹 ART_TYPE와 LINE1 모두 일치하는 각 레코드를 원한다.
<ROW MODID="19" RECORDID="11116">
<Art_Type>Poster</Art_Type>
<Location>1 2 3</Location>
<Line1>ELEVATOR
MACHINE
ROOM
107
</Line1>
</ROW>
주시면 감사하겠습니다 시작하는 방법에 어떤 도움 : 그것은 하나에 경기에서 위치를 추가해야합니다 그룹화 한 후이 같아야하므로으로 분류된다. 또한 좋은 xslt 1.0 테스트 프로그램이 있습니까? 사전에
감사합니다!
편집 :
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="artTypeNames" match="ROW" use="Art_Type" />
<xsl:key name="artCopy" match="ROW" use="Line1" />
<xsl:template match="FMPDSORESULT">
<xsl:for-each select="ROW[count(. | key('artTypeNames', Art_Type)[1]) = 1]">
<xsl:sort select="Art_Type" />
<xsl:value-of select="Art_Type" />
<xsl:for-each select="key('artTypeNames', Art_Type)">
<xsl:sort select="Art_Type" />
<xsl:value-of select="Art_Type" />
</xsl:for-each>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
내가 온라인 XML 변압기에 XML과 XSLT를 입력 : 내가 생각 해낸 것을 읽고 그래서 http://www.jenitennison.com/xslt/grouping/muenchian.html
: 나는 muenchian 그룹을 지적하고이 사이트를 발견 'XSLT is invalid'오류가 발생합니다.
이것은 실망 스럽습니다.
EDIT2가 :에 의해 다음
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fm="http://www.filemaker.com/fmpdsoresult">
<xsl:template match="fm:FMPDSORESULT">
<xsl:apply-templates select="fm:ROW[count(. | key('lineData', fm:Line1)[1]) = 1]">
</xsl:apply-templates>
</xsl:template>
<xsl:template match="fm:ROW">
<xsl:copy>
<xsl:apply-templates select="fm:Art_Type" />
<fm:Location>
<xsl:apply-templates select="key('artTypeNames', fm:Art_Type)/fm:Location" />
</fm:Location>
<xsl:apply-templates select="fm:Line1" />
</xsl:copy>
</xsl:template>
<xsl:template match="fm:Location">
<xsl:if test="position() > 1">-</xsl:if>
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
이 그룹화 Art_Type과 : 팀의 도움으로 나는 변환 적절한 XSLT를 구축 할 수 있었다 Line1 텍스트이지만 위치 번호가 추가됩니다. 이런 그들 모두에 다음 줄 1 텍스트가 다른 경우
<ROW xmlns="http://www.filemaker.com/fmpdsoresult">
<Art_Type>Poster</Art_Type>
<fm:Location xmlns:fm="http://www.filemaker.com/fmpdsoresult" xmlns="">1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34</fm:Location>
<Line1>CUSTODIAL
LOUNGE
117A
</Line1>
</ROW>
<ROW xmlns="http://www.filemaker.com/fmpdsoresult">
<Art_Type>Poster</Art_Type>
<fm:Location xmlns:fm="http://www.filemaker.com/fmpdsoresult" xmlns="">1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30-31-32-33-34</fm:Location>
<Line1>STORAGE
ROOM
117B
</Line1>
</ROW>
, 그것은 다른 그룹으로 추가해야합니다.
간단한 XSLT 온라인 도구 당신을 찾고 있다면 http://xslttest.appspot.com/ – Hash
감사합니다. 일단 xslt lol을 사용하는 방법을 알아 내면 유용 할 것입니다. – clrx
XSLT에서 google "기본 네임 스페이스"를 원할 수도 있습니다. –