Удалить первую строку из текстового файла с помощью XSLT

Я работаю с системой (Maximo), которая генерирует текстовый файл.
Мне нужно удалить только первую строку файла.
Для этого нужно использовать XSLT.

Есть идеи?


person NitroxDM    schedule 18.09.2009    source источник


Ответы (4)


Да, с помощью XSLT вы можете делать то, что хотите!

Вероятно, было бы проще сделать это в XSLT 2.0, если вам это подходит. Майкл Кей ответил на аналогичный вопрос в списке рассылки XSL в 2005 году.

Перефразируя его ответ, с небольшими примерами:

В XSLT 2.0: вы можете использовать unparsed-text () для чтения файла, tokenize(), чтобы разбить его на строки (и просто игнорировать первую строку).

<xsl:for-each select="tokenize(unparsed-text($in), '\r?\n')">
 ...
</xsl:for-each>

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

<!DOCTYPE foo [
<!ENTITY bar SYSTEM "bar.txt">
]>
<foo>
&bar;
</foo>
person Mads Hansen    schedule 19.09.2009
comment
Очень крутой трюк со ссылкой на сущность! Я надеюсь, что это сработает для него. :-) - person Ben Blank; 21.09.2009

Способ сделать это — не использовать XSLT.

XSLT может создавать текстовые файлы, но не может обрабатывать текстовые файлы. Он может обрабатывать только правильно сформированный XML.

person Ben Blank    schedule 18.09.2009
comment
Способ сделать это — не использовать XSLT. -- Согласен, но сейчас это единственный возможный вариант. - person NitroxDM; 19.09.2009
comment
@NitroxDM — вот что пытается сказать каждый из ответов здесь — если XSLT — единственный инструмент, который у вас есть, это невозможно сделать. Вы должны задействовать какой-либо другой инструмент для достижения своей цели, и если вы вообще можете задействовать другой инструмент, то у вас есть возможность использовать что-то более подходящее, чем XSLT. - person Ben Blank; 19.09.2009
comment
@Ben Blank - решение XSLT ПОЛНОСТЬЮ возможно. Смотрите мой ответ. - person Mads Hansen; 19.09.2009

XSLT будет принимать в качестве входных данных только допустимый XML-файл, а не обычный текстовый файл. Однако он может выводить текст.

(Я использую XSLT, например, для генерации кода C.)

person 0x6adb015    schedule 18.09.2009
comment
XSLT 2.0 может обрабатывать файлы, отличные от XML, с помощью функции unparsed-text(), а XSLT 1.0 можно заставить работать с обычным текстом, используя его в качестве ссылки на сущность. - person Mads Hansen; 19.09.2009

Если ваш XSLT-процессор поддерживает любое преобразование (бинарные xforms через FFD — дескрипторы плоских файлов), это можно сделать. Вы можете обернуть свой текст узлом, а затем работать с этим узлом, используя обычный шаблон XSLT, чтобы вывести все, что будет после первого возврата каретки.

person Thiyagaraj    schedule 18.09.2009
comment
Можно ли обернуть содержимое текстового файла в узел с помощью XSLT? - person NitroxDM; 19.09.2009
comment
@NitroxDM — Уловка-22. Если файл необходимо обработать, прежде чем вы сможете использовать его с XSLT, вы не можете использовать XSLT для этой обработки. - person Ben Blank; 19.09.2009
comment
В зависимости от вашего процессора/платформы — WebSphere DataPower (устройство SOA) поддерживает это — ibm.com/developerworks/forums/thread.jspa?messageID=14107417 - person Thiyagaraj; 19.09.2009