Это самый большой XPath XSLT FAQ.Просто поиск: "XPath default namespace"
Очень кратко :
Изменение:
<xsl:for-each select="//rule">
<xsl:for-each select="if/*">
...
</xsl:for-each>
</xsl:for-each>
Кому:
<xsl:for-each select="//doc:rule">
<xsl:for-each select="doc:if/*">
...
</xsl:for-each>
</xsl:for-each>
Причиной наблюдаемой запутанной проблемы является то, что в XPath любое нефиксированное имя считается находящимся в «пространстве имен».
Следовательно, select="//rule"
не выбирает ни одного элемента вдокумент, который находится в пространстве имен по умолчанию - нет элемента с именем rule
, который не находится в пространстве имен.
Вместо этого выражение XPath должно содержать префиксные имена, а префикс должен быть связан спространство имен по умолчанию - как это сделано в приведенном выше решении.