<!-- <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://localhost" xsi:schemaLocation="http://localhost example.xsd"> -->
Это не имеет ничего общего с использованием схемы XML. Проблема в том, что вы указываете пространство имен по умолчанию .
Использование выражений XPath для имен узлов в пространстве имен по умолчанию - это самый большой вопрос по XPath.
Пожалуйста, поищите в тегах xpath и xslt "пространство имен по умолчанию", и вы найдете много хороших ответов.
Решение для XSLT состоит в том, чтобы объявить пространство имен с некоторым префиксом (скажем, «x») и namespace-uri, которое совпадает с name-space-uri пространства имен по умолчанию в документе XML. Тогда в любом выражении XPath используйте x:name
вместо name
.
Таким образом, ваш XSLT-код становится :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://localhost" exclude-result-prefixes="x" >
<xsl:template match="/">
<ul>
<xsl:for-each select="x:root/x:element">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
и при применении к предоставленному документу XML с некомментированным элементом <root>
:
<root xmlns="http://localhost"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://localhost example.xsd">
<element>Element 1</element>
<element>Element 2</element>
<element>Element 3</element>
</root>
желаемый, правильный результат получается :
<ul>
<li>Element 1</li>
<li>Element 2</li>
<li>Element 3</li>
</ul>