Прежде всего, если вы не понимаете, как работают пространства имен XML и что они значат, у вас не будет конца проблем.Эта проблема, с которой вы сталкиваетесь, является верхушкой айсберга.
Тем не менее, вы можете иметь дело с пространствами имен так, как предложил Кайл Батт, назначая преобразование префиксов в масштабе преобразования для пространств имен в элементе stylesheet
а затем с помощью префиксов в вашем выражении XPath.
Но что, если вы не знаете пространства имен?Затем вы должны использовать более грубый инструмент:
<xsl:for-each select="*[local-name()='item']">
<xsl:value-of select="*[local-name()='key']"/>
</xsl:for-each>
Использование local-name()
полностью игнорирует пространства имен.Но вы не можете использовать его в тесте узла (это должно быть имя типа foo
или квалифицированное имя, например x:foo
), вы можете использовать его только в предикате.Вот почему милые *[local-name()='foo']
- единственный способ сделать это.