내 xslt 코드의 문제에 대한 도움이 필요합니다. 사용 된 프로세서/디버거 & IDE : (. 단지 난 내 선택에 필요한 요소를 아래로 시끄러운 쓰레기 오토바이) MSXML 6.0 MS Visual Studio에서 2012 년XSLT 1.0 고유 값 가져 오기 실패
내 정확한 입력
<?xml version="1.0" encoding="UTF-8"?>
<root>
<components>
<Object3D id="130" plName="STF45668"/>
<Object3D id="131" plName="RIOD122"/>
<Object3D id="132" plName="RIOD122"/>
<Object3D id="133" plName="RIOD122"/>
<Object3D id="182" plName="RIOD124"/>
<Object3D id="183" plName="RIOD124"/>
<Object3D id="184" plName="RIOD124"/>
<Object3D id="185" plName="RIOD124"/>
</components>
</root>
내 XSLT :
이
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:key name ="objectsByName" use="/root/components/Object3D" match="@plName"/>
<xsl:output media-type="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:variable name="allObjs" select="//Object3D"/>
<xsl:variable name="distinctObjsCount"
select="//Object3D[count(. | key('objectsByName', @plName)[1]) = 1]"/>
<xsl:variable name="distinctObjsGenID"
select="//Object3D[generate-id() =
generate-id(key('objectsByName', @plName)[1])]"/>
<xsl:for-each select="//Object3D[count(. | key('objectsByName', @plName)[1]) = 1]">
<xsl:value-of select="concat(@plName, '(',count(key('objectsByName', @plName)),')')"/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
는 변환 출력 내가 얻을이다
<?xml version="1.0" encoding="utf-8"?>
STF45668(0), RIOD122(0), RIOD122(0), RIOD122(0), RIOD124(0), RIOD124(0), RIOD124(0), RIOD124(0)
하지만 Object3D 요소에서 고유 한 값을 가져 오는 데 실패합니다.
그래서 ... 왜 이것이 잘못 될지 잘 모르겠습니다. 누구나 내가 뭘 잘못하고 있는지 알 수 있습니까?
편집 : 현재 사용중인 파일에 1 : 1.
문제를 재현 할 수 있도록 전체 XSLT 스타일 시트를 보여주십시오. 또한 완전한 XML 입력이 도움이 될 것입니다. 감사! –
나는 당신이 정말로 그것을 원한다고 생각하지 않는다. 실제 입력 파일에는 약 5k 줄의 프로그램 생성 XML 코드가 있고 xsl 파일에는 약 4k 줄이 있습니다. 그것은 premade 템플릿에서 .odt 파일을 생성하기 때문에> 거대한 오버 헤드입니다. 내가 할 수있는 일은 영향받은 요소와 관련된 모든 속성을 추가하는 것입니다. –
나는 당신이 가지고있는 모든 것의 10k 덤프를 요구하지 않았다. 그러나 사람들이 실수/불일치/놀라운 결과를 추적하기를 원한다면 모든 것을 게시하거나 b) 입력 및 코드의 작은 하위 집합에서이 문제를 격리해야합니다. 그렇지 않으면 모든 배팅이 해제됩니다. –