XSLT для удаления элемента, но не его дочерних элементов? - PullRequest
1 голос
/ 29 мая 2020

Ввод:

<req>
  <element>
   <field1>abcd</field1>
   <field2>05/05/2020</field2>
  </element>
</req>

Ожидаемый результат:

<req>
  <field1>abcd</field1>
  <field2>05/05/2020</field2>
</req>

Итак, мое требование - удалить element из ввода XML.

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Или просто:

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

<xsl:template match="/req">
    <xsl:copy>
        <xsl:copy-of select="element/*"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>
2 голосов
/ 30 мая 2020

Подумайте о преобразовании идентичности, когда вы видите такие проблемы:

Этот XSLT,

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

  <!-- Indent output: -->
  <xsl:output indent="yes"/>

  <!-- Cleanup extra whitespace in output: -->
  <xsl:strip-space elements="*"/>

  <!-- If not overridden, copy node as-is: -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- Override to treat element specially: Just like identity
       template but omit xsl:copy: -->
  <xsl:template match="element">
    <xsl:apply-templates select="@*|node()"/>
  </xsl:template>
</xsl:stylesheet>

применен к вашему вводу XML,

<req>
  <element>
    <field1>abcd</field1>
    <field2>05/05/2020</field2>
  </element>
</req>

производит ваш вывод XML,

<?xml version="1.0" encoding="UTF-8"?>
<req>
   <field1>abcd</field1>
   <field2>05/05/2020</field2>
</req>

по запросу.

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