에 따라이 문제는 쿼리에서 내가 값을 가질 수있는 매개 변수 '보행'을받을 수정 한 XSLT: Sorting based on sum of values from other nodesXSLT : 경로의 대체 일부 매개 변수
내가 XSLT의이 작품이 (데 미터 덕분에)에 다음과 'P'(페이스), 'T'(트로트) 또는 'A'(모든)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kOffspring" match="Horse" use="SireID"/>
<xsl:param name="Gait"/>
<xsl:template match="/*">
<xsl:apply-templates select="Sires/Sire">
<xsl:sort select="sum(key('kOffspring', ID)/*/Stakes)"
data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Sire">
Sire <xsl:value-of select="concat(ID,' (', Name, ') Stakes: ')"/>
<xsl:value-of select="sum(key('kOffspring', ID)/*/Stakes)"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
위의 코드에서 별표로 대체하는 방법이 있는가이 조각
sum(key('kOffspring', ID)/*/Stakes
인 부분과 걸음 걸이에 전달 된 값에 따라 xml 트리의 노드 이름?
슈퍼 단순화 된 XML은 다음과 같습니다
<t>
<Horses>
<Horse>
<ID>5</ID>
<Name>hrsE</Name>
<SireID>101</SireID>
<Pace>
<Stakes>100</Stakes>
</Pace>
<Trot>
<Stakes>300</Stakes>
</Trot>
</Horse>
</Horses>
<Sires>
<Sire>
<ID>101</ID>
<Name>srA</Name>
<LiveFoalsALL>117</LiveFoalsALL>
</Sire>
</Sires>
</t>
$ 보행이 경우 'A'내가 원하는 합 (키 ('kOffspring'ID)/*/스테이크가 (말의 모든 하위 노드 보면)
$ 보행이 'P'내가 합 원하는 (키 ('kOffspring'ID)/페이스/스테이크가 (단 말뚝을 찾기 위해 페이스 노드에서 보면) 인
$ 보행은 ' T '내가 원하는 합계 (키 ('k 자손 ', ID)/트로트/스테이크 (트로트 노드에서만 스테이크를 찾으십시오)
이렇게 매우 단순화 된 예입니다. 나는 $ Gait의 다른 값을 맞추기 위해 100 줄의 코드를 복사하는 것을 멈추려 고하고있다. 사용 변수를 시도해 보았지만 경로의 키를 사용할 때 노드 경로의 값을 변경하는 방법을 볼 수 없었습니다. 나는 잠재적으로 'match = "/ *"'템플릿에서 choose 문을 사용할 수 있음을 보았습니다. 그러나 그것은 정렬만을위한 것이 었습니다. 나는 'Sire'템플릿에 도달했을 때 여전히 붙어있었습니다. 내가 가지고있는 모든 '가치 - 선택 (value-of select)'진술을 골라라.
의견을 보내 주셔서 감사합니다. 감사합니다, 브라이스 Stenberg.
안녕 마이클, 잘 찾고 있습니다. 페이스와 트로트 노드 모두에서 일치 시키려고 할 때 $ Gait을 설정하는 것이 어떤 가치인지 모르겠다. 나는 빈 문자열을 시도하고 '*'값으로하지만 그 작동하지 않았다. 나는 Pacers와 Trotters와 같은 두 개의 매개 변수를 최상위 레벨에서 적절하게 (값 또는 널) 설정하고'sum (key ('kOspspring', ID)/* [name() = $ Pacers and name() = $ Bryce. – user1840734
woo - 그 안에 '또는'가 있어야합니다 :'sum (key ('kOffspring', ID)/* [name (T)]/Stakes'/Stakes' 그리고 작동하는 것 같습니다.) = $ Pacers or name() = $ Trotters]/Stakes' :-) .... 그리고 '더 나은 방법'으로는 더 복잡한 xslt/xml이 최대 5 개를 갖는 것처럼 하나의 매개 변수로 그것을하는 것입니다. 관련된 다른 노드 – user1840734
문자열의 시퀀스 인 $ Gaits 변수를 정의한 다음 이름이 그 중 하나와 동일한 경우 [name() = $ Gaits]가 true가됩니다. –