Как изменить значение в одном из атрибутов? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть исходный XML-документ:

<A>
  <B VALUE = "1"/>
  <B VALUE = "1"/>
</A>

Какое XSLT-преобразование использовать для преобразования приведенного выше XML-документа в следующее:

<A>
  <B VALUE = "1"/>
  <B VALUE = "2"/>
</A>

1 Ответ

0 голосов
/ 14 июля 2019

Я предполагаю, что в требуемом выводе значение атрибута VALUE должно быть положением его родительского элемента в последовательности /A/B

Тогда это преобразование :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="B/@VALUE[not(. = count(../preceding-sibling::B) +1 )]">
    <xsl:attribute name="VALUE">
      <xsl:value-of select="count(../preceding-sibling::B) + 1"/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<A>
  <B VALUE = "1"/>
  <B VALUE = "1"/>
</A>

дает требуемый результат :

<A>
   <B VALUE="1"/>
   <B VALUE="2"/>
</A>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...