2010-07-07 2 views
1

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

Спасибо!

EDIT: Вот некоторые псевдокод, я не могу опубликовать фактический код:

<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 
+0

Вам необходимо отправить код, если вы хотите хорошо ответы. –

ответ

3

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

+ Отличный пример, спасибо! –

+0

Я думаю, вы должны добавить к своему ответу, что мусор - это результат встроенного шаблона для текстовых узлов, например, ответа гарпо. – 2010-07-08 14:14:09

4

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

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

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

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

+0

+ Отличное объяснение! –

0

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

<xsl:template match="*" /> 
Смежные вопросы