XSL: ложный вывод с использованием сопоставления с шаблоном

У меня есть таблица стилей XSL, которую я использую для создания фрагментов xHTML. XML содержит много информации, и я хочу преобразовать только один конкретный раздел, я сопоставляю его так (обратите внимание, что это мой верхний уровень/первое совпадение):

<xsl:template match="root/SystemInfo/Errors">

Это прекрасно работает, однако перед моим предполагаемым выводом я вижу, что 1001 записывается. После дальнейшего изучения это данные различных тегов, которые предшествуют моему совпавшему xpath "root/SystemInfo/Errors". Что я могу сделать, чтобы этого не произошло?

Пример xml:

<?xml version="1.0"?>
<root>
    <Settings>
        <Enabled>1</Enabled>
        <Mode1>0</Mode1>
        <Mode2>0</Mode2>
        <Limit>1</Limit>
    </Settings>
    <SystemInfo>
        <Errors>
            <NOCONNECTION>1</NOCONNECTION>
        </Errors>
    </SystemInfo>
</root>

XML Playground настройте здесь, чтобы показать эффект.


person Chris    schedule 12.07.2012    source источник
comment
Если это не массивно, было бы полезно увидеть весь XSLT   -  person freefaller    schedule 12.07.2012
comment
Это огромная! Все соответствует подразделам исходного совпадения ("root/SystemInfo/Errors")   -  person Chris    schedule 12.07.2012
comment
Кажется, что, поскольку я явно не имею дело с остальной частью XML, он возвращается к режиму по умолчанию, в котором он просто выводит данные в этих тегах... Нужно ли мне match=* поймать их и просто ничего не делать внутри ?   -  person Chris    schedule 12.07.2012
comment
Достаточно честно, @Chris, понял ... однако, без чего-то, с чем можно было бы поработать, это будет сложно ... надеюсь, у кого-то появится идея, не видя ее. Удачи   -  person freefaller    schedule 12.07.2012
comment
стоит ли создавать xmlplayground.com?   -  person freefaller    schedule 12.07.2012
comment
@freefaller Хороший сайт!!!   -  person Chris    schedule 12.07.2012
comment
В случае, если это не очевидно для вас (потому что это было не для меня и заняло несколько минут головокружения), вам нужно задействовать разделы, отличные от XML, для преобразований, чтобы сделать что-нибудь   -  person freefaller    schedule 12.07.2012
comment
@freefaller Спасибо, приятель, я обновил вопрос, и да, мне потребовалось несколько минут, чтобы понять это!   -  person Chris    schedule 12.07.2012
comment
Эээ, я думаю, что он работает иначе, чем jsfiddle... Я сохранил изменение (думая, что это создаст новую версию), но я думаю, что он обновил ваш оригинал! Можете ли вы проверить свою ссылку, чтобы увидеть, видите ли вы новый раздел template, который я добавил?   -  person freefaller    schedule 12.07.2012


Ответы (1)


Добавлять

<xsl:template match="text()"/>

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

<xsl:template match="/">
  <xsl:apply-templates select="root/SystemInfo/Errors"/>
</xsl:template>
person Martin Honnen    schedule 12.07.2012