Замените тег xml последним, используя xslt - PullRequest
0 голосов
/ 10 марта 2020

Допустим, у меня есть следующее xml

<root>
   <subroot1>
      <tag1>value1</tag1>
      <tag2>value1</tag2>
      <tag3>value1</tag3>
      <tag1>value2</tag1>
   </subroot1>
   <subroot2>
      <tag4>value1</tag4>
      <tag3>value2</tag3>
   </subroot2>
</root>

Мне нужен xslt (xslt1.0), который удаляет дубликаты тегов и сохраняет только последний из них, который может быть у разных родителей
ожидаемый результат xml было бы так:

<newroot>
   <tag2>value1</tag2>
   <tag1>value2</tag1>
   <tag4>value1</tag4>
   <tag3>value2</tag3>
</newroot>

есть предложения?

1 Ответ

0 голосов
/ 10 марта 2020

Используйте ключ и мюнхенскую группировку, только чтобы идентифицировать последний вместо первого дубликата:

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

  <xsl:output indent="yes"/>

  <xsl:key name="group" match="*[not(*)]" use="name()"/>

  <xsl:template match="root">
      <newroot>
          <xsl:copy-of select="//*[not(*)][generate-id() = generate-id(key('group', name())[last()])]"/>
      </newroot>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/naZXVEG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...