Ответ 1
child::node()
соответствует любому node, который не является атрибутом node, namespace node или документом node. Это означает, что оно соответствует командам обработки, комментариям и текстовым узлам.
child::*
соответствует только элементам.
См. раздел 5.5.3 спецификации:
Образец node() соответствует всем узлам выбранный выражением root (.)//(child-or-top:: node()), что есть, все элементы, текст, комментарий и обрабатывать узлы команд, независимо от того, или нет, у них есть родитель. Это не атрибут соответствия или узлы пространства имен потому что выражение не выбирает узлы, использующие атрибут или пространство имен Оси. Он не соответствует узлам документа потому что для обратной совместимости причины, по которым ось "ребенок-верх" не сопоставить документ node.
Обновление: Майкл ответил вдохновил следующую таблицу стилей. Используйте его для проверки типов узлов по мере их обработки:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/|node()">
<xsl:call-template name="type" />
<xsl:text> [ </xsl:text>
<xsl:value-of select="." />
<xsl:text> </xsl:text>
<xsl:apply-templates select="node()" />
<xsl:text> ] </xsl:text>
</xsl:template>
<xsl:template name="type">
<xsl:choose>
<xsl:when test="count(.|/)=1">
<xsl:text>Root</xsl:text>
</xsl:when>
<xsl:when test="self::*">
<xsl:text>Element </xsl:text>
<xsl:value-of select="name()" />
</xsl:when>
<xsl:when test="self::text()">
<xsl:text>Text</xsl:text>
</xsl:when>
<xsl:when test="self::comment()">
<xsl:text>Comment</xsl:text>
</xsl:when>
<xsl:when test="self::processing-instruction()">
<xsl:text>PI</xsl:text>
</xsl:when>
<xsl:when test="count(.|../@*)=count(../@*)">
<xsl:text>Attribute</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Измените, что соответствовало/выбрано для проверки других шаблонов. Например, следующий ввод:
<A attr="test" other="val">
<B/>
<C>some value</C>
<!-- a comment -->
<D/>
</A>
Производит следующий вывод:
Root [
some value
Element A [
some value
Text [
] Element B [
] Text [
] Element C [ some value
Text [ some value
] ] Text [
] Comment [ a comment
] Text [
] Element D [
] Text [
] ] ]
Особая благодарность этой странице за то, что вы начали работу с тестами node. (Это особенно подходит, что один из ответов Майкла из более чем шести лет назад тоже появляется там.)