XML-форумы | |
Обсуждение XML и связанных с ним технологий |
Автор | Сообщение | |
---|---|---|
KazaK Новичок Зарегистрирован: 16.07.2003 Сообщения: 3 |
[4693]
Ср Июл 16, 2003 15:42
Есть xml следующего вида:
Как правильно присвоить значение атрибуту? <?xml version="1.0" encoding="UTF-8"?> <chart> <name>Первая строка</name> <name>Вторая строка</name> <name>Третья строка</name> </chart> Почему-то не хочет работать следующий фрагмент XSL: <xsl:for-each select="//chart/name"> <text x="-96"> <xsl:attribute name="y"> <xsl:value-of select="30*position()"/> </xsl:attribute> <xsl:value-of select="."/> </text> </xsl:for-each> При преобразовании возникает следующая ошибка: y has an illegal attribute: {1}; SystemID: file:///main_short.xsl; Line#: 185; Column#: 33 y has an illegal attribute: {1}; SystemID: file:///main_short.xsl; Line#: 185; Column#: 33 y has an illegal attribute: {1}; SystemID: file:///main_short.xsl; Line#: 185; Column#: 33 В чем может быть дело? |
|
Paranorm Студент Зарегистрирован: 24.04.2002 Сообщения: 81 |
[4694]
Ср Июл 16, 2003 16:28
Я проверил твой код под XMLSpy - все работает.
Reply Какой у тебя трансформер? |
|
KazaK Новичок Зарегистрирован: 16.07.2003 Сообщения: 3 |
[4695]
Ср Июл 16, 2003 16:43
я юзаю Xalan под JBuilder'ом
Re: Reply |
|
Евгений Новичок Зарегистрирован: 28.05.2003 Сообщения: 12 |
[4696]
Ср Июл 16, 2003 17:05
У меня под Saxon'ом тоже все пашет...
Может где-то в другом месте XSL ошибка? Как то было, что парсер указывал на ошибку вообще из другого XSL (мною не создаваемого), простое закоментаривание части кода в моем XSL устраняло проблему... Много времени не стал тратить, поскольку было не особо важное изменение, но факт остается фактом! Как такое может быть? Может профессионалы помогут? |
|
KazaK Новичок Зарегистрирован: 16.07.2003 Сообщения: 3 |
[4701]
Чт Июл 17, 2003 14:55
Мне удалось более-менее локализовать проблему. Итак, первый xsl:
<?xml version='1.0' encoding="ISO-8859-5"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <svg xml:space="preserve" x="0in" y="0in" width="29.9672in" height="21.7556in" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality" viewBox="-5480 0 10878 14983"> <xsl:for-each select="//chart/name"> <text x="-96"> <xsl:attribute name="y"> <xsl:value-of select="264 + 30*position()"/> </xsl:attribute> <xsl:value-of select="."/> </text> </xsl:for-each> </svg> </xsl:template> </xsl:stylesheet> При обработке им следующего xml-документа: <?xml version="1.0" encoding="UTF-8"?> <chart> <name>Первая строка</name> <name>Вторая строка</name> <name>Третья строка</name> </chart> возникает ошибка. Теперь убираю 2 строки из xsl: <?xml version='1.0' encoding="ISO-8859-5"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <xsl:for-each select="//chart/name"> <text x="-96"> <xsl:attribute name="y"> <xsl:value-of select="264 + 30*position()"/> </xsl:attribute> <xsl:value-of select="."/> </text> </xsl:for-each> </xsl:template> </xsl:stylesheet> Ошибка пропала. Теперь не могу понять, как влияют убранные строки на работу трансформера. |
|
olpa Любитель Зарегистрирован: 23.04.2002 Сообщения: 981 Откуда: Санкт-Петербург |
[4783]
Пт Авг 01, 2003 07:33
Принципиальное отличие между двумя примерами кода в том, что первый вариант содержит xml:space="preserve".
У инструкции xsl:attribute есть ряд ограничений, одно из них: узлы атрибутов должны создаваться до создания дочерних узлов других типов. В первом фрагменте, из-за xml:space="preserve", между <text x="-96"> и <xsl:attribute name="y"> есть текстовый узел, содержащий перевод строки. Поэтому XSLT-процессор ругается. Paranorm использует MSXML, который слишком вольно общается с пробельными символами. Поэтому у него ошибка не проявилась. Кстати, рекомендую переписать код в духе XSLT: Код:
|
Страница 1 из 1 |