Sự khác biệt giữa hai mẫu này là gì?Sự khác biệt giữa * và nút() trong XSLT
<xsl:template match="node()">
<xsl:template match="*">
Sự khác biệt giữa hai mẫu này là gì?Sự khác biệt giữa * và nút() trong XSLT
<xsl:template match="node()">
<xsl:template match="*">
<xsl:template match="node()">
là viết tắt cho:
<xsl:template match="child::node()">
này phù hợp với bất kỳ loại nút có thể được lựa chọn thông qua the child::
trục:
yếu tố
text-nút
xử lý-hướng dẫn (PI) nút
comment nút.
Ở phía bên kia:
<xsl:template match="*">
là viết tắt cho:
<xsl:template match="child::*">
này phù hợp với bất kỳ yếu tố.
Biểu thức XPath: someAxis :: * khớp với bất kỳ nút nào của loại nút chính cho trục đã cho.
Đối với trục child::
, loại nút chính là phần tử.
Cũng tham khảo XSL xsl:template match="/" cho các mẫu đối sánh khác.
Chỉ để minh họa cho một trong những sự khác biệt, tức là *
không phù hợp text
:
Với xml:
<A>
Text1
<B/>
Text2
</A>
Matching trên node()
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<!--Suppress unmatched text-->
<xsl:template match="text()" />
<xsl:template match="/">
<root>
<xsl:apply-templates />
</root>
</xsl:template>
<xsl:template match="node()">
<node>
<xsl:copy />
</node>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Cung cấp:
<root>
<node>
<A />
</node>
<node>
Text1
</node>
<node>
<B />
</node>
<node>
Text2
</node>
</root>
Trong khi phù hợp trên *
:
<xsl:template match="*">
<star>
<xsl:copy />
</star>
<xsl:apply-templates />
</xsl:template>
Không phù hợp các nút văn bản.
<root>
<star>
<A />
</star>
<star>
<B />
</star>
</root>
Cũng không khớp '*' nút nhận xét phù hợp, nút lệnh xử lý, nút thuộc tính, nút không gian tên và các nút tài liệu ... Mẫu hoặc biểu thức '*' (riêng của nó, như là abbr.cho 'child :: *') ** chỉ bao giờ khớp các nút phần tử và các nút phần tử chỉ **. Khi sử dụng '@ *', viết tắt của 'attribute :: *', dấu hoa thị khớp với các nút thuộc tính _only_ trên trục thuộc tính. – Abel
Câu trả lời này cũng được áp dụng: http://stackoverflow.com/questions/5394178/difference-between-childnode-and-child – StuartLC