我创建了两个文件input.xml
和formatter.xslt
。
input.xml中:
<?xml-stylesheet type="text/xsl" href="formatter.xslt"?>
<div><span>1</span><span>2</span></div>
formatter.xslt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><head></head><body>
<xsl:copy-of select="//*[1]"/>
,
<xsl:copy-of select="(//*)[1]"/>
</body></html>
</xsl:template>
</xsl:stylesheet>
然后我在Internet Explorer中打开input.xml
,然后按下F12。我看到DOM树就像:
<html><head></head><body>
<div><span>1</span><span>2</span></div><span>1</span>
,
<div><span>1</span><span>2</span></div>
</body></html>
为什么//*[1]
和(//*)[1]
会将不同的元素复制到输出文档中?
答案 0 :(得分:7)
好//*[1]
是/descendant-or-self::node()/*[1]
而(//*)[1]
是(/descendant-or-self::node()/*)[1]
所以前者选择所有元素节点作为其父节点的第一个子节点,而后者仅选择第一个节点由括号中的表达式选择,即它仅选择那些父节点的子节点中的第一个元素节点。