Tôi đang kéo phần còn lại của tóc ra để tìm kiếm bên ngoài đơn giản bằng cách sử dụng Saxon 9.1.0.7.XSLT 2.0 tra cứu bên ngoài bằng cách sử dụng phím() và tài liệu()
Tôi có một file nguồn đơn giản dummy.xml:
<something>
<monkey>
<genrecode>AAA</genrecode>
</monkey>
<monkey>
<genrecode>BBB</genrecode>
</monkey>
<monkey>
<genrecode>ZZZ</genrecode>
</monkey>
<monkey>
<genrecode>ZER</genrecode>
</monkey>
</something>
Sau đó, các tập tin tra cứu là GenreSet_124.xml:
<GetGenreMappingObjectsResponse>
<tuple>
<old>
<GenreMapping DepartmentCode="AAA"
DepartmentName="AND - NEWS AND CURRENT AFFAIRS"
Genre="10 - NEWS"/>
</old>
</tuple>
<tuple>
<old>
<GenreMapping DepartmentCode="BBB"
DepartmentName="AND - NEWS AND CURRENT AFFAIRS"
Genre="11 - NEWS"/>
</old>
</tuple>
... lots more
</GetGenreMappingObjectsResponse>
gì tôi m cố gắng để đạt được chỉ đơn giản là để có được giữ của "Thể loại "giá trị dựa trên giá trị" DepartmentCode ".
Vì vậy, XSL của tôi trông giống như:
...
<!-- Set up the genre lookup key -->
<xsl:key name="genre-lookup" match="GenreMapping" use="@DepartmentCode"/>
<xsl:variable name="lookupDoc" select="document('GenreSet_124.xml')"/>
<xsl:template match="/something">
<stuff>
<xsl:for-each select="monkey">
<Genre>
<xsl:apply-templates select="$lookupDoc">
<xsl:with-param name="curr-label" select="genrecode"/>
</xsl:apply-templates>
</Genre>
</xsl:for-each>
</stuff>
</xsl:template>
<xsl:template match="GetGenreMappingObjectsResponse">
<xsl:param name="curr-genrecode"/>
<xsl:value-of select="key('genre-lookup', $curr-genrecode)/@Genre"/>
</xsl:template>
...
Vấn đề mà tôi có là tôi nhận được gì trở lại. Tôi hiện chỉ nhận được
<?xml version="1.0" encoding="UTF-8"?>
<stuff>
<Genre/>
<Genre/>
<Genre/>
<Genre/>
</stuff>
tôi đã chuyển tất cả dữ liệu tra cứu để có các thuộc tính của GenreMapping, trước đây là phần tử con của GenreMapping bất cứ khi nào tôi bước vào template match = "GetGenreMappingObjectsResponse" nó sẽ chỉ in ra tất cả các văn bản từ mọi GenreMapping (DepartmentCode, DepartmentName, Thể loại)!
Tôi không thể cho cuộc sống của tôi tìm ra những gì tôi đang làm sai. Bất kỳ helpo/góp ý sẽ được đánh giá rất nhiều.
xin vui lòng tìm việc niêm yết XSLT thực tế hiện nay:.
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Define the global parameters -->
<xsl:param name="TransformationID"/>
<xsl:param name="TransformationType"/>
<!-- Specify that XML is the desired output type -->
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<!-- Set up the genre matching capability -->
<xsl:key name="genre-lookup" match="GenreMapping" use="@DepartmentCode"/>
<xsl:variable name="documentPath"><xsl:value-of select="concat('GenreSet_',$TransformationID,'.xml')"/></xsl:variable>
<xsl:variable name="lookupDoc" select="document($documentPath)"/>
<!-- Start the first match on the Root level -->
<xsl:template match="/something">
<stuff>
<xsl:for-each select="monkey">
<Genre>
<xsl:apply-templates select="$lookupDoc/*">
<xsl:with-param name="curr-genrecode" select="string(genrecode)"/>
</xsl:apply-templates>
</Genre>
</xsl:for-each>
</stuff>
</xsl:template >
<xsl:template match="GetGenreMappingObjectsResponse">
<xsl:param name="curr-genrecode"/>
<xsl:value-of select="key('genre-lookup', $curr-genrecode, $lookupDoc)/@Genre"/>
</xsl:template>
</xsl:stylesheet>
Các TransformationID là alway 124 (do đó các tập tin tra cứu chính xác được mở Các Loại chỉ là một tên mà tôi hiện không sử dụng nhưng có ý định
.
Trình biên dịch XSLT nào bạn đang sử dụng? – Welbog
Saxon-B 9.1.0.7 –
Số liệu. Tôi không quen với cái đó. Có lẽ sau này Tomalak sẽ đến và giúp bạn. Phương pháp keyless có hoạt động không? – Welbog