шаблон будет делать правильные вещи, но только если есть другой шаблон (например, шаблон идентичности), что приводит к его применять - сам по себе он выиграл» t, потому что правила шаблона по умолчанию никогда не применяют шаблоны для атрибуции узлов. Вот пример идентичности на основе
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xjdf="urn:example-com:xjdf"> <!-- replace URI as appropriate -->
<!-- identity template - copy everything as-is except where overridden -->
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<!-- clear TimeStamp attribute -->
<xsl:template match="xjdf:XJDF/xjdf:AuditPool/xjdf:Created/@TimeStamp">
<xsl:attribute name="TimeStamp"/>
</xsl:template>
</xsl:stylesheet>
Обратите внимание, что вам не нужно ведущий //
на структуру матча, и в зависимости от структуры остальной части документа XML не может понадобиться все четыре уровня иерархии - просто match="@TimeStamp"
или match="xjdf:Created/@TimeStamp"
может быть достаточно точным. Если вы хотите изменить другие атрибуты, вы можете просто добавить дополнительные шаблоны, соответствующие этим, но если вы хотите добавить атрибуты new к элементу, которого не было на входе, вам нужно будет написать шаблон, соответствующий элементу сам, например
<xsl:template match="xjdf:Created">
<xjdf:Created newAttribute="newValue">
<xsl:apply-templates select="@*|node()" />
</xjdf:Created>
</xsl:template>
Я упомянул, что я хочу, чтобы в качестве значения атрибута был установлен пустой String. Ваше решение сработало для меня, спасибо! Как бы я изменил значение второго атрибута одного и того же элемента? –
Вы просто добавляете другую инструкцию '' (обновленный ответ). –
potame