Tôi nghĩ rằng tôi đã thấy một sai lầm trong câu trả lời cho this question và chỉ ra. Tôi đã nói rằng tôi đã sai, và câu trả lời của tôi sau đó đã bị xóa.Kết hợp các phần tử con trong XSL
Tôi vẫn không thấy mình đã sai. Vì vậy, tôi đăng bài ở đây và hy vọng ai đó có thể giải thích sự hiểu lầm của tôi với tôi.
Câu trả lời tôi đã trả lời để giải thích việc sử dụng các mẫu áp dụng. Nó chứa XML và XSL sau, mô tả cách các mẫu sẽ được xuất hiện:
<!-- sample XML snippet -->
<xml>
<foo /><bar /><baz />
</xml>
<!-- sample XSLT snippet -->
<xsl:template match="xml">
<xsl:apply-templates select="*" /> <!-- three nodes selected here -->
</xsl:template>
<xsl:template match="foo"> <!-- will be called once -->
<xsl:text>foo element encountered</xsl:text>
</xsl:template>
<xsl:template match="xml/*"> <!-- will be called twice -->
<xsl:text>other element countered</xsl:text>
</xsl:template>
bình luận của tôi là mẫu cuối cùng trong nên là:
<xsl:template match="*"> <!-- will be called twice -->
<xsl:text>other element countered</xsl:text>
</xsl:template>
vì nút hiện tại đã là <xml>
Tôi được thông báo:
Không, xml/* là mẫu phù hợp với phần tử con của một phần tử có tên xml.
Kiểm tra câu trả lời gốc
Tuy nhiên, với XML này:
<xml>
<foo /><bar /><baz />
</xml>
Và XSL stylesheet này (điền đoạn mã ở trên):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="xml">
<xsl:apply-templates select="*" /> <!-- three nodes selected here -->
</xsl:template>
<xsl:template match="foo"> <!-- will be called once -->
<xsl:text>foo element encountered.
</xsl:text>
</xsl:template>
<xsl:template match="xml/*"> <!-- will be called twice -->
<xsl:text>other element countered.
</xsl:text>
</xsl:template>
</xsl:stylesheet>
tôi nhận được :
other element countered.
other element countered.
other element countered.
Kiểm tra của tôi phiên bản 'chỉnh'
Nếu tôi thay thế các mẫu mới nhất với:
<xsl:template match="*"> <!-- will be called twice -->
<xsl:text>other element countered.
</xsl:text>
</xsl:template>
như mỗi câu trả lời của tôi, tôi nhận được:
foo element encountered.
other element countered.
other element countered.
đó sẽ xuất hiện để đúng.
Tôi hy vọng câu hỏi của mình không vi phạm bất kỳ nguyên tắc nào, nhưng tôi không thể thấy rằng tôi sai và hy vọng ai đó có thể giải thích đầy đủ hơn.
PS. Tôi sợ câu trả lời ban đầu của tôi về câu hỏi khác đã được đăng dưới dạng câu trả lời, không phải là nhận xét vì tôi chưa có đủ điểm để đăng nhận xét. Tôi không chắc điều gì là tốt nhất để làm ...
Cảm ơn vì đã tìm ra lỗi lầm ngu ngốc của tôi, nó đã được sửa ngay trong chủ đề khác. Điều này đã không được chú ý bởi tất cả mọi người khác, những người đã nhìn vào câu trả lời trong suốt những năm qua. – Tomalak