functx: remove-attribute добавляет пустой xmlns - PullRequest
2 голосов
/ 07 января 2020

Функция functx: remove-attribute автоматически добавляет пустой @ xmlns к узлу, и я хотел бы предотвратить это поведение. Пример xml:

<mei meiversion="3.0.0" xmlns="http://www.music-encoding.org/ns/mei">
<note accid.ges="f" doxml.id="d28e18935" dur="8" oct="4" pname="e" tstamp="1.75" xml:id="note_112296"/>
</mei>

Выдержка XSLT:

<xsl:copy-of select="functx:remove-attributes(., $attributes2remove)" />

Ток (ложь) XML Выход:

<note accid.ges="f" doxml.id="d28e18935" dur="8" oct="4" pname="e" tstamp="1.75" xml:id="note_112296" xmlns=""/>

1 Ответ

1 голос
/ 08 января 2020

В теле функции, я думаю, вы хотите использовать xsl:copy вместо xsl:element:

<xsl:function name="functx:remove-attributes" as="element()"
              xmlns:functx="http://www.functx.com">
  <xsl:param name="elements" as="element()*"/>
  <xsl:param name="names" as="xs:string*"/>

   <xsl:for-each select="$elements">
     <xsl:copy>
       <xsl:sequence
         select="(@*[not(functx:name-test(name(),$names))],
                 node())"/>
     </xsl:copy>
   </xsl:for-each>

</xsl:function>

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

...