У меня есть XML-файл вроде:
<?xml version="1.0" encoding="ISO-8859-1"?>
<list>
<report file="onefile.xml" oneAttr="2123as"></report>
<report file="myfile.xml" oneAttr="blabla"></report>
<report file="myfile.xml" oneAttr="2123as"></report>
<report file="another.xml" oneAttr="2123as"></report>
</list> <!-- changed by edit -->
И мне нужна таблица стилей, которая может добавить новый элемент отчета после последнего совпадения @file="myfile.xml"
.
Что я получил до сих пор:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/list">
<list>
<xsl:variable name="insertAfter" select="report[@file='myfile.xml'][last()]"/>
<xsl:for-each select="report">
<xsl:copy-of select="."/>
<xsl:text>
</xsl:text>
<xsl:if test="current() = $insertAfter">
<report file="newFile.xml"></report>
</xsl:if>
<xsl:text>
</xsl:text>
</xsl:for-each>
</list>
</xsl:template>
Приведенный выше XSLT не работает, сравнение на равенство не работает должным образом и соответствует всем отчетами, следовательно, добавление нового элемента узла каждый раз.Я предполагаю, что, возможно, это не проверка равенства атрибутов, а только текста внутри, который является пустым.
Я знаю, что в XSLT 2.0 есть этот оператор "eq", который, возможно, выполняет то, что я намереваюсь,но я бы хотел придерживаться XSLT 1.0.
Есть предложения по решению?