xsl для удаления комментариев со всех узлов - PullRequest
2 голосов
/ 14 сентября 2010

Я использую сценарий xsl для удаления комментариев из всей части xml.Это фактически удаление комментариев, которые находятся в родительском узле, но не из других внутренних узлов.

[отредактировано]

Обновление вопроса.Мое требование - удалить все комментарии из всего документа XML.

Ответы [ 2 ]

8 голосов
/ 14 сентября 2010

Это преобразование :

<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()|@*" name="identity">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
   </xsl:template>
   <xsl:template match="comment()"/>
</xsl:stylesheet>

при применении к любому документу XML, содержащему узлы комментариев, например :

<!-- foo -->
<a>
   <!-- bar -->
   <b>
      <c><!-- baz --></c>
   </b>
</a>

дает желаемый результат (тот же документ с удаленными узлами комментария):

<a>
    <b>
        <c/>
    </b>
</a>

Примечание: 1017 *: использование самого фундаментального и мощного XSLT-дизайнашаблон - использование и переопределение правила identity .

3 голосов
/ 14 сентября 2010

Звучит так, будто вы хотите скопировать только комментарии из входного XML.И вы говорите, что ваша таблица стилей копирует одни комментарии, но не другие?Когда вы говорите «комментарии, которые находятся в родительском узле», вы имеете в виду комментарии, которые являются дочерними элементами корневого узла (то есть вне всех элементов)?

Когда я пытаюсь использовать эту таблицу стилей, она работает нормально.В частности, XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="/">
      <comments>
         <xsl:for-each select="//comment()">
            <comment><xsl:value-of select="."/></comment>
         </xsl:for-each>
      </comments>
   </xsl:template>
</xsl:stylesheet>

, работающий с вводом

<?xml version="1.0" encoding="UTF-8"?>
<!-- foo -->
<a>
   <!-- bar -->
   <b>
      <c><!-- baz --></c>
   </b>
</a>

, дает вывод

<?xml version="1.0" encoding="utf-8"?>
<comments>
   <comment> foo </comment>
   <comment> bar </comment>
   <comment> baz </comment>
</comments>

Если это не то поведение, которое вы хотели, или если вашене работает с вашим вводом, можете ли вы опубликовать всю таблицу стилей и образец входного XML, и показать текущий вывод?И какой процессор XSLT вы используете?

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