XSLT сбрасывает мусор в конце моего файла - PullRequest
1 голос
/ 08 июля 2010

Я использую XSLT для манипулирования данными внутри XML-файла (я беру кишки одного XML-файла и помещаю их в новую оболочку в другом XML-файле). Я использую только некоторые данные из первого файла, а данные из частей, которые я не использую, объединяются до конца нового файла. Как мне не дать XSLT это сделать?

Спасибо!

РЕДАКТИРОВАТЬ: Вот некоторые псевдокод, я не могу опубликовать фактический код:

<xsl:output method="xml"/>
<xsl:template match="foo">
    <xsl:element name="bar">
        <!--... makes elements and traverses some of the other file ...-->
    </xsl:element>
</xsl:template>

А на выходе:

    <foo>
        <bar>
            <!-- ... -->
        </bar>
    </foo>

    <!-- junk at the end of the file that matches up with the content of the unused data tags -->

    0

    N
    N
    Y
    00000148
    ASDF

Ответы [ 3 ]

4 голосов
/ 08 июля 2010

XSLT включает в себя шаблоны по умолчанию , которые вызываются, когда вы не пишете один для его переопределения. Например, если вы не включите шаблон, соответствующий корневому элементу, он сделает это:

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

Существует также шаблон по умолчанию, который будет выдавать текстовое содержимое сопоставленных элементов. Это, вероятно, тот «мусор», который вы видите в выходных данных.

Я предполагаю, что вам нужно предотвратить это, включив корневой шаблон и явно сопоставив те элементы, которые вас интересуют.

3 голосов
/ 08 июля 2010

XSLT имеет шаблон соответствия корня по умолчанию.Чтобы заменить его, попробуйте что-то вроде этого в вашем XSLT:

<xsl:template match="/">
  <xsl:apply-templates select="foo"/>
</xsl:template>    
<xsl:template match="foo">
    <xsl:element name="bar">
        <!--... makes elements and traverses some of the other file ...-->
    </xsl:element>
</xsl:template>
0 голосов
/ 09 июля 2010

Только для завершения - вам не нужно сопоставлять корневой элемент, если вы этого не хотите.Другой способ предотвратить использование встроенного шаблона по умолчанию - определить пустой шаблон, который собирает все остальное в конце XSLT-файла, например:

<xsl:template match="*" />  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...