Tôi khá mới đối với XSLT và do đó tôi muốn biết thực tiễn tốt nhất để kiểm tra sự tồn tại của một thuộc tính là gì. XML của tôi trông giống như sau:XSLT nếu thuộc tính tồn tại/else
<root>
<languages>
<lang id="EN">English<lang>
<lang id="FR">French<lang>
<lang id="DE">German</lang>
</languages>
<items>
<item lang="EN">test 1</item>
<item>test 2</item>
<item lang="FR">item 3</item>
</items>
</root>
Lưu ý rằng thuộc tính 'lang'-cho mục' là tùy chọn.
Bây giờ tôi muốn lặp qua các mục bằng cách sử dụng vòng lặp, trong khi kiểm tra xem nó có thuộc tính "lang" hay không. Nếu có, tôi muốn lấy toàn bộ chuỗi bằng cách sử dụng ID (ví dụ: EN -> 'English'). Nếu thuộc tính không được thiết lập, tôi muốn nó được viết là "No language set" hoặc một cái gì đó giống nhau.
Bây giờ tôi sử dụng mã sau đây nhưng tôi tự hỏi bản thân mình nếu nó không thể được thực hiện một cách hiệu quả hơn.
<xsl:for-each select="//root/items/item">
<xsl:variable name="cur_lang" select="@lang" /> <!-- first I store the attr lang in a variable -->
<xsl:choose>
<xsl:when test="@lang"> <!-- then i test if the attr exists -->
<xsl:value-of select="//root/languages/lang[@id=$cur_lang]" /> <!-- if so, parse the element value -->
</xsl:when>
<xsl:otherwise>
No language set <!-- else -->
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
Bất kỳ đề xuất/mẹo nào?
Bạn có thể thêm một ví dụ về những gì đầu ra chính xác nên được đưa ra đầu vào bạn đã cung cấp? –
Carlo, Bạn quên cung cấp kết quả mong muốn - Tôi nghĩ rằng bạn muốn chuỗi ngôn ngữ mở rộng thay thế giá trị thuộc tính 'lang' hiện tại. Vui lòng * chỉnh sửa * câu hỏi và cung cấp kết quả mong muốn khi chuyển đổi được áp dụng trên tài liệu XML được cung cấp. –