Несколько элементов с одинаковым именем в XML и хотят изменить значение одного конкретного элемента только на основе одного условия, используя xslt - PullRequest
0 голосов
/ 21 декабря 2018

Входной XML

<?xml version="1.0"?>
<Response>
  <TroubleResponse>
    <Check>
      <DStatus>
        <GID>123456789</GID>
        <FLAG/>
      </DStatus>
      <DStatus>
        <GID>222233333</GID>
        <FLAG/>
      </DStatus>
      <DStatus>
        <GID>5555777788</GID>
        <FLAG/>
      </DStatus>
    </Check>
    <RAM>
      <Details>
        <RAMID>5555777788</RAMID>
      </Details>
    </RAM>
  </TroubleResponse>
</Response>

Мой вопрос:
Я хочу обновить значение FLAG элемента как TRUE, где значение RAMID элемента совпадает со значением GID элемента.

Как я могудобиться этого с помощью XSLT?

1 Ответ

0 голосов
/ 21 декабря 2018

Используйте шаблон идентификации в сочетании с этим шаблоном

<xsl:template match="FLAG[../GID = ../../../RAM/Details/RAMID]">
    <xsl:copy>TRUE</xsl:copy>
</xsl:template>

Шаблон идентификации для XSLT-1.0:

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

Сочетание обоих обеспечиваетжелаемый результат.
Если вы можете XSLT-2.0 или выше, вы можете заменить шаблон идентификации на

<xsl:mode on-no-match="shallow-copy"/>    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...