Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Пробельные символы / 7 сообщений из 7, страница 1 из 1
10.11.2008, 16:49
    #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
10.11.2008, 17:16
    #35644634
Hooter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пробельные символы
...
Рейтинг: 0 / 0
10.11.2008, 18:04
    #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
10.11.2008, 18:07
    #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
10.11.2008, 18:15
    #35644822
pavelblk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пробельные символы
Вообще preserve-space не работает.
Может это XMLSpy еще какую-то предобработку выполняет, хотя не должен.

У кого-нть работал preseve-space ??????
...
Рейтинг: 0 / 0
10.11.2008, 18:28
    #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
10.11.2008, 18:36
    #35644880
pavelblk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пробельные символы
В Saxone все пучком.
Всем спасибо.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Пробельные символы / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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