Удалить пустые атрибуты xmlns - PullRequest
0 голосов
/ 11 октября 2018

Это мой ввод xml <a><b><![CDATA[This is a text]]></b></a>

Это мой xsl

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

<xsl:template match="/">
 <xsl:apply-templates select="//b" />
</xsl:template>

<xsl:template match="b">
 <xsl:choose>                                                       
  <xsl:when test=".='This is a text'">
    <e xmlns="www.example.com">
      <f>yes</f>
      <g>
          <xsl:call-template name="atemp"/>
      </g>
    </e>
  </xsl:when>                                                                      
  <xsl:otherwise>
   <d>NO</d>                                                         
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>

<xsl:template name="atemp">
  <l>l</l>
  <m>m</m>
  <n>n</n>
</xsl:template>

</xsl:stylesheet>

Это вывод xml-

<?xml version="1.0" encoding="UTF-8"?>

<e xmlns="www.example.com">
 <f>yes</f>
 <g>
  <l xmlns="">l</l>
  <m xmlns="">m</m>
  <n xmlns="">n</n>
 </g>
</e>

Я хочу эти xmlns="" в l,m,n тегах, которые должны отсутствовать.Этот код является частью большого Java-проекта.Интересно, что эти xmlns="" не производятся на компьютере моего коллеги, даже когда у нас обоих одинаковый код.Вот бегущий код http://xsltfiddle.liberty -development.net / 3NzcBtS / 1

Это вывод, который я хочу -

<?xml version="1.0" encoding="UTF-8"?>

<e xmlns="www.example.com">
 <f>yes</f>
 <g>
  <l>l</l>
  <m>m</m>
  <n>n</n>
 </g>
</e>

Что мне делать?

1 Ответ

0 голосов
/ 11 октября 2018

Измените

<xsl:template name="atemp">
  <l>l</l>
  <m>m</m>
  <n>n</n>
</xsl:template>

на

<xsl:template name="atemp">
  <l xmlns="www.example.com">l</l>
  <m xmlns="www.example.com">m</m>
  <n xmlns="www.example.com">n</n>
</xsl:template>

, чтобы поместить l, m и n в пространство имен www.example.com.Поскольку пространство имен www.example.com по умолчанию уже объявлено в e, и поскольку эти элементы являются потомками e, вы удалите xmlns="" из этих элементов в соответствии с запросом.


Или, с учётом xsl:template с хорошим предложением от @ TimC :

<xsl:template name="atemp" xmlns="www.example.com">
  <l>l</l>
  <m>m</m>
  <n>n</n>
</xsl:template>

Или с учётом всего до xsl:stylesheet:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0"
                xmlns="www.example.com">
...