Удаление атрибутов xml: space при использовании copy-of в xslt - PullRequest
0 голосов
/ 29 июля 2011

Следующее является частью кода в моем файле input.xml:

<info>
<name>
<surname>Sachin</surname>
<x> </x>
<given-names>J</given-names>
</name>
<x>, </x>
<name>
<surname>Sushant</surname>
<x> </x>
<given-names>K</given-names>
</name>
</info>

Когда я копирую эти узлы, используя элемент copy-of, как в

<xsl:copy-of select="info"></xsl:copy-of>

, тогдагенерируется следующий вывод:

<info>
<name>
<surname>Sachin</surname>
<x xml:space="preserve"> </x>
<given-names>J</given-names>
</name>
<x xml:space="preserve">, </x>
<name>
<surname>Sushant</surname>
<x xml:space="preserve"> </x>
<given-names>K</given-names>
</name>
</info>

Я хочу удалить xml:space="preserve" из моего файла output.xml.

1 Ответ

3 голосов
/ 29 июля 2011

xsl: copy-of делает точную копию. Если вы хотите внести какие-либо изменения, пусть даже небольшие, вам необходимо использовать шаблон кодирования «измененный шаблон идентификации». В этом случае следующее шаблонное правило должно делать это:

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@* except xml:space"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

(оператором «кроме» является XPath 2.0 - если вы застряли с 1.0, используйте @*[name() != 'xml:space'])

...