Удалите родительские элементы XML на основе списка значений с помощью XSLT

#xml #xslt

Вопрос:

Допустим, у меня есть список globalId:

 4EAED006DCDC
2AE33C272408
C3DE024CAC11
 

И немного XML с конфигурациями из базы данных моего приложения:

   <ConfigKeyValuesTable>
    <ConfigKeyValues>
      <KeyValue>true</KeyValue>
      <CreatedDate>2020-09-04T09:42:57.6685544-05:00</CreatedDate>
      <GlobalId>2AE33C272408</GlobalId>
      <IsActive>1</IsActive>
      <ModifiedDate>2021-09-28T00:38:40.5075315-05:00</ModifiedDate>
    </ConfigKeyValues>
    <ConfigKeyValues>
      <KeyValue>false</KeyValue>
      <CreatedDate>2020-09-04T09:42:57.6685544-05:00</CreatedDate>
      <GlobalId>8E761269F5AA</GlobalId>
      <IsActive>1</IsActive>
      <ModifiedDate>2021-09-28T00:38:40.5845906-05:00</ModifiedDate>
    </ConfigKeyValues>
  </ConfigKeyValuesTable>
 

Как бы я использовал этот список, чтобы удалить родителя для всех экземпляров, в которых globalId соответствует записи из моего списка? Я видел несколько примеров, которые позволяют удалить родительский атрибут из 1 совпадения, как это:

 <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="ConfigKeyValues[GlobalId='2AE33C272408']"/>

</xsl:stylesheet>
 

Комментарии:

1. Как вы получаете этот список? Это жестко закодировано в вашей трансформации? Передано в качестве параметра? В каком формате?

2. Также, пожалуйста, укажите, какую версию XSLT поддерживает ваш процессор.

3. У меня есть список globalId в файле .txt, разделенный новой строкой.

4. Я бы использовал плагин XML Tools для Np , который позволяет выполнять преобразование XSL. github.com/morbac/xmltools

5. Для меня использование плагина XML Tools в NotePad было скорее головной болью, чем чем-либо еще. Было бы проще для вас загрузить последнюю версию SaxonHE, использовать возможности чтения файлов XSLT3 и готово.