Как я могу изменить атрибут в родительском узле?
Это блок XML:
<Object type="proto">
<Name value="test1"/>
<Enabled value="1"/>
<System value="active"/>
<Time value="10"/>
</Object>
<Object type="proto">
<Name value="test2"/>
<Enabled value="1"/>
<System value="active"/>
<Time value="20"/>
</Object>
Как изменить значение "Время" только для "test1" во время копирования?
1 ответ
Решение
Это один из возможных способов:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Object[Name/@value='test1']/Time">
<xsl:copy>
<xsl:attribute name="value">30</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Краткое объяснение относительно xsl:template
s используется:
<xsl:template match="@* | node()">...
: Шаблон идентичности; копирует узлы и атрибуты в выходной XML без изменений.<xsl:template match="Object[Name/@value='test1']/Time">...
: Переопределяет шаблон идентичности для<Time>
элемент, который является прямым потомком<Object>
иметь ребенкаName/@value
равняетсяtest1
, Этот шаблон копирует соответствующие<Time>
элемент и изменить атрибутvalue
в30
,