powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Неполное копирование XML (пропуски в выходном файле)
13 сообщений из 13, страница 1 из 1
Неполное копирование XML (пропуски в выходном файле)
    #39504367
Avers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Гугление не помогло, может не по тем ключевым словам ищу гуглю.
В качестве обучающего материала использую книгу "XSLT" Дуг Тидуэлл
Есть входной файл (создается программно):
Код: xml
1.
2.
3.
4.
5.
6.
<root>
    <element1>
        <element2>2</element2>
        <element3>3</element3>
    </element1>
</root>



Есть таблица с двумя шаблонами:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
    <xsl:template match="element2" />

    <xsl:template match="*">
        <xsl:copy>
            <xsl:copy-of select="@*" />
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>



На выходе, естественно, получается:
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="UTF-8"?><root>
    <element1>
        
        <element3>3</element3>
    </element1>
</root>



Собственно вопрос: как исключить из файла пустые строки? Т.е. мне нужно получить:
Код: xml
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="UTF-8"?><root>
    <element1>
        <element3>3</element3>
    </element1>
</root>


В вышеупомянутой книге приводится фраза "Если вы захотите удалить эти пропуски, измените таблицу стилей". Но как ее изменить не уточняется.
<xsl:strip-space /> убирает все пропуски и "лепит" весь файл в одну строку.
Пробовал видоизменить шаблоны, тогда строки "лепятся" в одну внутри родительского элемента (element1)
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39504423
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AversСобственно вопрос: как исключить из файла пустые строки?Забейте. На структуру и данные это влияние не оказывает, а смотреть на XML через блокнот - это нонсенс
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39504449
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avers<xsl:strip-space /> убирает все пропуски и "лепит" весь файл в одну строку.
Пробовал видоизменить шаблоны, тогда строки "лепятся" в одну внутри родительского элемента (element1)
Ну вроде как и есть решение проблемы
<xsl:output indent="yes"/> - должно всё сделать красиво
Код: xml
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
    <xsl:template match="/">
            <xsl:copy-of select="*" />
    </xsl:template>
</xsl:stylesheet>


должно сработать....
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39504769
Avers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Собственно да, на семантическом уровне наличие/отсутствие пустых строк не меняет сути (если они не внутри элементов со смешанным содержимым). Но:
1) когда речь идет о файле размером в десятки тысяч строк и более трети из них пустые - это уже сказывается на размере файла;
2) если есть хотя бы малая вероятность того, что XML придется править в "полевых" условиях, целесообразно задуматься о читаемости/отступах/именовании тегов;
3) да и просто хочется получить файл визуально не хуже исходного :)

Фридрих,

<xsl:output indent="yes"/> без <xsl:strip-space elements="*" /> не оказывает влияния на выходной документ, в сочетании же с <xsl:strip-space elements="*" /> получается что-то вроде:
Код: xml
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="UTF-8"?><root>
<element1>
<element3>3</element3>
</element1>
</root>


тоже не совсем то, что хотелось бы получить. Пустых строк нет, но отступы отсутствуют как таковые, только переносы строк.

Спасибо за ответы.
Похоже, что кротчайший путь к решению моей проблемы - добавить после преобразования XSLT вторую обработку, стороннюю с удалением пустых строк.
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39504829
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avers,

а ты каким процессором пользуешься? и каким редактором открываешь?
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39504855
Avers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фридрих,

Тестовые таблицы XSLT делаю в NetBeans и какой там процессор - понятия не имею (все работает "из коробки"). А файлы открываю либо все тем же NetBeans либо во встроенном в far редакторе.
В NetBeans исключительно пишутся схемы и таблицы, вручную применяются. А продакшн версия встраивается в приложение, написанное на C# (там уже VS2013/VS2017).

пробовал в "xsl:stylesheet" менять свойство version="2.0" между 1.0 и 2.0 - разницы не увидел.
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39504894
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avers,

пробуй сделать преобразование в другом редакторе.... http://xml-copy-editor.sourceforge.net/
а если файл очень большой и процесор будет падать, то надо делать на XQuery http://basex.org/
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39505272
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avers1) когда речь идет о файле размером в десятки тысяч строк и более трети из них пустые - это уже сказывается на размере файла;zip
Avers2) если есть хотя бы малая вероятность того, что XML придется править в "полевых" условиях, целесообразно задуматься о читаемости/отступах/именовании тегов;Вы doc файлы тоже в блокноте редактируете?
Avers3) да и просто хочется получить файл визуально не хуже исходного :)Опять 25. Данные и отображение данных это принципиально разные понятия
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39505897
Avers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фридрих,

Спасибо за ссылки, обязательно попробую.
К сожалению, в моем случае это не решит главной проблемы. Упаковываю все в недра ПО, писанного на C#, даже при <xsl:output indent="yes"/> в сочетании с <xsl:strip-space elements="*" /> дает что-то вроде:
Код: xml
1.
<?xml version="1.0" encoding="UTF-8"?><root><element1><element3>3</element3></element1></root>


Занятно, что даже переносов строк нет. Отличие от предыдущего процессора очевидно, но, увы, не в ту сторону, что нужно. :(
Похоже и правда проще обработать xml как текст (кротчайший путь к цели).

_Vasilisk_,

_Vasilisk_Avers1) когда речь идет о файле размером в десятки тысяч строк и более трети из них пустые - это уже сказывается на размере файла;zip
Вероятно, вы не обратили внимание на мое сообщение ранее. Это преобразование будет находиться внутри ПО, тащить туда zip большого смысла нет. К тому же опыт показывает, что даже сжатие zip не убирает разницу в размерах файлов/архивов. Файл (а также архив с файлом) с пустыми строками (а если быть точным со строками с лишними пробелами и переносом строки) все равно больше, чем аналогичный без лишнего мусора.
_Vasilisk_Avers2) если есть хотя бы малая вероятность того, что XML придется править в "полевых" условиях, целесообразно задуматься о читаемости/отступах/именовании тегов;Вы doc файлы тоже в блокноте редактируете?

Если надо будет, файл редактируется и блокнотом и vi и чем угодно, что есть под рукой. Только doc - староват, хотя бы docx :)
_Vasilisk_Avers3) да и просто хочется получить файл визуально не хуже исходного :)Опять 25. Данные и отображение данных это принципиально разные понятия
Вероятно вы не заметили, в ответе выше я согласился с вами про разницу между отображением и содержанием. А также, прошу обратить внимание, что в посте речь идет именно о наличии мусора (который удобнее и нагляднее продемонстрировать именно на отображении файла), а не о панике в связи с редактированием xml файлов в блокноте (как вы могли подумать).
Как я понимаю, кроме рекомендации "забить" (надо сказать, не худший совет) по существу проблемы добавить вам нечего.
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39506004
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avers,

Код: xml
1.
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>



попробуй полностью прописать выходные данные, может сработает!? Отпишись...
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39506013
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AversУпаковываю все в недра ПО, писанного на C#, даже при <xsl:output indent="yes"/> в сочетании с <xsl:strip-space elements="*" /> дает что-то вроде:
Код: xml
1.
<?xml version="1.0" encoding="UTF-8"?><root><element1><element3>3</element3></element1></root>


Занятно, что даже переносов строк нет.
Потому что в ПО, писанном на C#, xml форматирует XmlWriter, а настройки форматирования задаются посредством XmlWriterSetings. В данном случае в них нужно задать значения свойств Indent = true, IndentChars = "\t" (например).
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39506140
Avers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фридрих,

Не помогло в случае ПО, на отдельных процессорах проверю, как будет свободная минутка или след. задача, связанная с XSLT.
Спасибо за помощь! и за ссылки!


Сон Веры Павловны,

Спасибо! Помогло! Именно для ПО писанного на C# оказалось достаточным настроить XmlWriterSettings. Получилась конфетка/персик!


Вывод : гораздо проще проблема решается программно на уровне конкретного используемого языка, библиотек. Управлять форматированием на уровне XSLT оказалось сложнее, чем я мог себе представить.
...
Рейтинг: 0 / 0
Неполное копирование XML (пропуски в выходном файле)
    #39506161
Avers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фридрих,
Сон Веры Павловны,

Следует уточнить. Сработало сочетание:
Код: xml
1.
2.
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*" />


и параметров XmlWriterSettings
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Неполное копирование XML (пропуски в выходном файле)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]