XSLT - вставить элемент в позицию, основанную на значении другого элемента на том же уровне - PullRequest
0 голосов
/ 22 апреля 2020
<Level>
    <Name>XYZ</Name>
    <Number>456</Number>
    <DateTime>2020-03-11T08:53:00</DateTime>
 </Level>
<Level>
    <Name>ABC</Name>
    <Number>123</Number>
    <DateTime>2020-03-13T08:53:00</DateTime>
 </Level>
 <Level>
    <Name>PQR</Name>
    <Number>789</Number>
    <DateTime>2020-03-12T08:53:00</DateTime>
 </Level>

Вставить новый элемент Value ниже элемента только тогда, когда Level / Name = AB C

Так что результат должен быть следующим:

 <Level>
    <Name>XYZ</Name>
    <Number>456</Number>
    <DateTime>2020-03-11T08:53:00</DateTime>
 </Level>
<Level>
    <Name>ABC</Name>
    <Number>123</Number>
    <Type>Value</Type>
    <DateTime>2020-03-13T08:53:00</DateTime>
 </Level>
 <Level>
    <Name>PQR</Name>
    <Number>789</Number>
    <DateTime>2020-03-12T08:53:00</DateTime>
 </Level>

заранее спасибо .

1 Ответ

0 голосов
/ 22 апреля 2020

Вот возможное решение.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="Level/Number[../Name='ABC']">
    <xsl:copy-of select="."/>
    <Type>Value</Type>
  </xsl:template>

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

</xsl:stylesheet>

Посмотрите, как это работает здесь: https://xsltfiddle.liberty-development.net/6pS26mN/1

...