У меня есть следующий входной XML-файл:XSLT-1,0: Изменение значения атрибута
$ cat data.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<outer id="0" status="FAIL" >
<nested status="FAIL" >
<inner status="FAIL" >
<innermost status="FAIL" />
</inner>
</nested>
</outer>
<outer id="1" status="VOID">
<nested status="VOID" >
<inner status="VOID" >
<innermost status="VOID" />
<innermost status="VOID" />
</inner>
</nested>
</outer>
</root>
Этот XSL-файл, как предполагается изменить значение атрибута status
в VOID
если FAIL
:
$ cat filter.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[@status = 'FAIL']">
<!--xsl:template match="*/@status[. = 'FAIL']"-->
<xsl:copy>
<xsl:attribute name="status">VOID</xsl:attribute>
<!--xsl:attribute name="newattribute">NEW VALUE</xsl:attribute-->
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Однако, это ничего не меняет. Я знаю, что соответствует правильным узлам, потому что я могу добавить новый атрибут на этапе, когда изменение должно произойти:
...
<!-- This works fine -->
<xsl:attribute name="newattribute">NEW VALUE</xsl:attribute>
...
Как я могу изменить значение status
?
It работает сейчас, спасибо. – nautical
«Добавление атрибута к элементу заменяет любой существующий атрибут этого элемента тем же самым расширенным именем». (Https://www.w3.org/TR/xslt#creating-attributes) – LarsH