Вы неправильно используете XPath в атрибутах match
. Вам нужен атрибут xmlns:xhtml="http://www.w3.org/1999/xhtml"
в вашем элементе xsl:stylesheet
, а затем вам нужно будет использовать префикс xhtml:
в выражениях XPath (вам нужен префикс; XPath не подчиняется пространствам имен по умолчанию).
После этого у вас все еще будет проблема, что он будет обрабатывать все остальное тоже. Я не знаю, есть ли лучшее решение для этого, но я думаю, что вам нужно будет явно обрабатывать вещи на пути к элементу tbody
, что-то вроде
<xsl:template match="xhtml:html">
<xsl:apply-templates select="xhtml:body"/>
</xsl:template>
и то же самое для body
и так далее, пока не дойдете до вашего tbody
матча.
XPath также поддерживает более сложное сопоставление, чем просто конкретный дочерний элемент, как указано выше. Например, сопоставить третий дочерний тег div
можно с помощью
<xsl:template match="xhtml:div[3]">
и сопоставление элемента с определенным атрибутом с
<xsl:template match="xhtml:div[@class='IMPORTANT']">
Здесь []
окружает дополнительное условие, которое должно быть выполнено, чтобы элемент считался совпадающим. Простое число означает индексирование в совпадениях и выборку только той, которая имеет этот индекс (индексирование основано на 1), знак @
предшествует атрибуту, но у вас может быть произвольно сложный XPath, поэтому вы можете сопоставить практически любая субструктура, которую вы хотите.