XSLT не работает, потому что ваш элемент email
имеет пространство имен, и чтобы сопоставить элемент с пространством имен, используя XPath, вы всегда должны явно объявлять префикс и использовать его.
Вам нужно написать XSL так:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ws="http://www.w3schools.com"
version="1.0">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="ws:email">
<h2>To</h2>
<td><xsl:value-of select="ws:to"/></td>
</xsl:for-each>
</body>
</html>
</xsl:template>
Я не уверен, что вы ожидаете от XSD: он кажется правильным, но это никак не повлияет на применение XSLT.
email
является корневым элементом в вашем XML, так что вы можете иметь только один элемент email
на файл XML - возможно, у вас должен быть другой корневой элемент над ним.
Обратите внимание, что вы генерируете сомнительный HTML: <td>
, который не находится внутри таблицы.