Tôi đang học XSL ngay bây giờ và có câu hỏi liên quan đến tham chiếu chéo. Tệp XML mục tiêu của tôi được cấu trúc như sau:Tham khảo chéo XSL
<XML>
<Model>
<packedElement typ="class" id="1"/>
<packedElement typ="class" id="2"/>
<packedElement typ="class" id="3"/>
</Model>
<Elements>
<Element idref="1">
<Attributes comment="comment 1."/>
</Element>
<Element idref="2">
<Attributes comment="comment 2."/>
</Element>
<Element idref="3">
<Attributes comment="comment 3."/>
</Element>
</Elements>
</XML>
Tôi muốn kết nối id = idref. Mục tiêu của tôi là liệt kê tất cả các gói phần mềm đóng gói và in nhận xét của họ. Các bạn có thể giúp tôi không?
Tôi đã cố gắng giải quyết vấn đề này bằng khóa-funktion, nhưng tôi đã không thành công lắm.
Edit:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:key name="CommentK" match="Element" use="@idref"/>
<xsl:template match="XML">
<XML>
<xsl:apply-templates/>
</XML>
</xsl:template>
<xsl:template name="Start" match="packedElement">
<xsl:variable name="TEST" select="@id"/>
<xsl:variable name="Comment">
<xsl:call-template name="FindComment">
<xsl:with-param name="test2" select="@id"/>
</xsl:call-template>
</xsl:variable>
<content comment="{$Comment}" id ="{@id}" test="{$TEST}"></content>
</xsl:template>
<xsl:template name="FindComment">
<xsl:param name="test2"/>
<xsl:for-each select="key('CommentK', '$test2')">
<xsl:value-of select="Attributes/@comment"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
phiên bản XSLT là 2.0. (Btw ai đó có thể cho tôi biết sự khác biệt giữa .XSLT và .xsl?)
XSLT 1.0 hoặc 2.0? –
Nỗ lực của bạn trông như thế nào? Bạn muốn kết quả trông như thế nào? – JLRishe
Tôi nghĩ rằng nỗ lực của bạn sẽ gần như hiệu quả, ngoại trừ việc bạn đã sử dụng ''$ test2'' là giá trị _string_" $ test2 ". Nó chỉ nên là 'khóa' ('CommentK', $ test2) '. Tôi nghĩ rằng 'FindComment' và' for-each' là quá mức cần thiết. Câu trả lời của Martin Honnen là một câu trả lời hay. – JLRishe