У меня есть некоторый XML, который содержит достаточное количество атрибутов в каждом элементе, и иногда мне нужно отформатировать один или два атрибута, если выполняется какое-то условие.Я думал, что сделаю это с XSL.
Итак, внутри моего шаблона в файле XSL у меня есть следующее:
<xsl:choose>
<xsl:when test="ytd < 0.000000001 or interest < 0.000000001">
<xsl:element name="Report">
<xsl:choose>
<xsl:when test="ytd< 0.000000001">
<xsl:element name="ytd">0</xsl:element>
</xsl:when>
<xsl:when test="interest < 0.000000001">
<xsl:element name="interest">0</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="." />
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="." />
</xsl:otherwise>
</xsl:choose>
Операции для полей YTD и интереса работают, как я ожидаюих, по существу, округление до нуля для меня.Проблема в другом пункте;Кажется, я неправильно понимаю, как использовать копию.Я хочу, чтобы остальные n атрибутов элемента Report были скопированы так, как они есть в исходном XML.Проблема в том, что с этим текущим шаблоном я получаю вывод, подобный следующему, для отчета с очень маленьким значением ytd:
<Report><ytd>0</ytd></Report>
Так что, очевидно, я неправильно копирую остальную часть элемента.Любые указатели?
РЕДАКТИРОВАТЬ: Пример XML-файла ввода может быть:
<Reports>
<Report>
<name>Bob</name>
<account>Saver</account>
<ytd>100</ytd>
<interest>0.5</ytd>
<cosigned>false</cosigned>
</Report>
<Report>
<name>Steve</name>
<account>Gold Account</account>
<ytd>0.0000000001</ytd>
<interest>0.0000000001</ytd>
<cosigned>false</cosigned>
</Report>
</Reports>
И желаемый результат будет:
<Reports>
<Report>
<name>Bob</name>
<account>Saver</account>
<ytd>100</ytd>
<interest>0.5</ytd>
<cosigned>false</cosigned>
</Report>
<Report>
<name>Steve</name>
<account>Gold Account</account>
<ytd>0</ytd>
<interest>0</ytd>
<cosigned>false</cosigned>
</Report>
</Reports>
(Очевидно, я просто издеваюсьэто, но, надеюсь, вы понимаете, о чем я)
Спасибо, Дейв.