powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Пробельные символы
7 сообщений из 7, страница 1 из 1
Пробельные символы
    #35644549
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть xml:

Код: plaintext
<root><z> 1 </z> <z> 2 </z></root>
Прошу обратить внимание на то, что между элементами z есть пробел.


Есть xslt:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
	
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"></xsl:apply-templates>
</xsl:copy>
</xsl:template>	

</xsl:stylesheet>

На выходе:

Код: plaintext
<root><z> 1 </z><z> 2 </z></root>

К сожалению пробел между элементами z был уничтожен.


Как это победить?

Примечание:
1. Входной файл не имеет indentation (пробелы, перенос строки, таюуляция) для лицеприятного отображения xml в текстовом редакторе.
2. Во входном файле есть пробелы, но они выполняют функцию текста, который нельзя терять.
3. Естесвенно, что нельзя прменять инструкцию indent="yes", так как получим ненужное форматирование.


Пробовал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
	
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"></xsl:apply-templates>
</xsl:copy>
</xsl:template>	

<xsl:template match="text()"><xsl:value-of select="."></xsl:value-of></xsl:template>	

</xsl:stylesheet>
Не выходит.

Есть инструкция:
<xsl:strip-space elements=""></xsl:strip-space>
Но здесь указывются элементы в которых как раз нужно почистить whitespaces.


Есть идеи?
...
Рейтинг: 0 / 0
Пробельные символы
    #35644634
Hooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Пробельные символы
    #35644789
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текстовый узел сохраняется если имеет место какое-либо из следующих условий:

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

- Текстовый узел содержит хотя бы один непробельный символ. Как и в XML, пробельным символом считаются #x20, #x9, #xD и #xA.

- Элемент, являющийся предком этого текстового узла, имеет атрибут xml:space со значением preserve и нет более близких элементов-предков, имеющих xml:space со значением default.

В остальных случаях текстовый узел вычищается.

Если название элемента совпадает с NameTest в элементе xsl:strip-space, то он удаляется из перечня названий элементов, сохраняющих пробельные символы. Если название элемента совпадает с NameTest в элементе xsl:preserve-space, то оно добавляется к перечню названий элементов, сохраняющих пробельные символы.



Код: plaintext
<xsl:strip-space elements="root z"></xsl:strip-space>

или

Код: plaintext
<xsl:strip-space elements="*"></xsl:strip-space>

Не выходит..........
Пробовал MSXML и built-in XMLSpy
...
Рейтинг: 0 / 0
Пробельные символы
    #35644798
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатался не strip-space, preserve-space

Код: plaintext
1.
<xsl:preserve-space elements="root z"></xsl:preserve-space>
<xsl:preserve-space elements="*"></xsl:preserve-space>

К сожалению не работает
...
Рейтинг: 0 / 0
Пробельные символы
    #35644822
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще preserve-space не работает.
Может это XMLSpy еще какую-то предобработку выполняет, хотя не должен.

У кого-нть работал preseve-space ??????
...
Рейтинг: 0 / 0
Пробельные символы
    #35644857
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторI got a message off-list that suggested to me that I wasn't very clear about this. To be clear, the template-rule approach below requires that you have xml:space="preserve" in the source document to prevent MSXML from stripping any whitespace. Of course, as a stylesheet writer, that may not always be within your control. But one way or another, you need to preserve whitespace, and I can only think of three ways to do that:


1. Use xml:space="preserve" in the source document,
2. Set the preserveWhiteSpace property to true in the MSXML API, or
3. Use a different XSLT processor.

A variation of #1 is to simply put xml:space="preserve" on all the <element1> and <element2> elements, but that might not be as practical.

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


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