3
요소의 하위 요소에 대한 특성 값 목록을 검색하려고 시도하지만 값이 한 번만 표시되기를 원합니다.XSLT에서 각 요소와 관련된 불일치를 선택하십시오.
는 예를 들어, 나는 다음과 같은 XML
<root>
<sec>
<nom-title>
<nom-chapter>
<nom-article><data att="1.1"/></nom-article>
<nom-article>
<nom-item><data att="1.1"/></nom-item>
<nom-item><data att="1.2"/></nom-item>
</nom-article>
</nom-chapter>
<nom-chapter>
<nom-article><data att="2.1"/></nom-article>
<nom-article><data att="1.1"/></nom-article>
</nom-chapter>
</nom-title>
<nom-title>
<nom-chapter>
<nom-article><data att="1.1"/></nom-article>
</nom-chapter>
</nom-title>
</sec>
</root>
이 그리고 그런 결과 원하는 :
<root>
<nom-title>
<att>1.1</att>
<att>1.2</att>
<att>2.1</att>
<nom-chapter>
<att>1.1</att>
<att>1.2</att>
<nom-article>
<att>1.1</att>
</nom-article>
<nom-article>
<att>1.1</att>
<att>1.2</att>
<nom-item><att>1.1</att></nom-item>
<nom-item><att>1.2</att></nom-item>
</nom-article>
</nom-chapter>
</nom-title>
<nom-title>
<att>1.1</att>
<nom-chapter>
<att>1.1</att>
<nom-article>
<att>1.1</att>
</nom-article>
</nom-chapter>
</nom-title>
</root>
나는 XSL 사용하려고했습니다 핵심 요소를하지만, 그것은 단지 반환 하나의 요소에 대한 값. 이 예제에서는 첫 번째 제목은 1.1을 반환하지만 두 번째 제목은 1.1을 반환하지 않습니다. 내가 사용했던 XSL :
<xsl:key name="allAtt"
match="//*[starts-with(name(.),'nom-')]/data"
use="@att"/>
<xsl:template match="nom-title|nom-chapter|nom-article|nom-item">
<xsl:element name="name(.)">
<xsl:apply-templates select=".//*[starts-with(name(.),'nom-')]/data
</xsl:element>
</xsl:template>
<xsl:template match="data">
<xsl:variable name="att" select="@att"/>
<xsl:if test="generate-id(.)=generate-id(key('allAtt',$att)[1]">
<xsl:element name="att"><xsl:value-of select="$att"></xsl:element>
</xsl:if>
</xsl:template>
xslt에 대한 경험으로는 유효한 XML이 있어야합니다. "nom-article"요소가 닫히지 않은 것 같습니다. 먼저 해결하려고 할 수 있습니다. –
Justin에 동의합니다. 올바른 형식의 XML 입력 샘플을 먼저 보여주십시오. 현재 입력 구조가 명확하지 않고 여러 태그가 제대로 닫히지 않았습니다 (예 :'', ' ). –
죄송합니다. 복사 붙여 넣기가 잘못되었습니다. 수정했습니다. – claudex