xsl:copy-of строчные и прописные буквы в названиях тегов

IIIEPJIOK

Новичок
xsl:copy-of строчные и прописные буквы в названиях тегов

Всем здравствовать.

Делаю преобразование XML(xsl)->HTML на клиенте.
Кусок XML'я оставляю без изменений, используя <xsl:copy-of> в результате
в ИЕ - все теги пишутся заглавными буквами
в ФФ - все теги пишутся прописными,
в Опере - как я пишу, так и остаются....
Вопрос, как добиться единообразия?
Может какая инструкция есть?
Пересмотрел http://www.citforum.ru/internet/xslt/index.shtml, ничего не нашел :(
 

IIIEPJIOK

Новичок
не понял :)
что смотрю?
результат преобразования?

alert(innerHTML).... или для ФФ "просмотреть исходный код выделенного фрагмента"...
ДА и какая разница.....меня это беспокоит не из эстетических соображений.
Я потом js-скриптом подгружаю еще один xsl-файл и делаю преобразование. Вот оно-то и не проходит, да бы за место моего <SomeTag> я имею либо <SOMETAG> или <sometag>
Я для себя пока нашел тока два способа решить проблему:
1. отказаться от <xsl:copy-of> и подгружать XML отдельным запросом;
2.в xsl-ках везде писать SomeTag|SOMETAG|sometag.
 

FB3

Новичок
Вместо <xsl:copy-of /> порекомендовал бы всегда использовать конструкцию <xsl:copy><xsl:apply-templates /></xsl:copy>.
А вообще, примеры кода лучше выкладывать, без них разбираться сложно.
 

IIIEPJIOK

Новичок
А вообще, примеры кода лучше выкладывать, без них разбираться сложно.
Ну, допустим:
Имеем 1.xml:
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="1.xsl" charset="windows-1251"?>
<Root>
<Something>1</Something>
<SomethingElse>2</SomethingElse>
<OneMoreSomeThing>3</OneMoreSomeThing>
</Root>

и имеем 1.xsl
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="Root">
<html>
<body onload="alert(document.getElementById('xml_source').innerHTML);">
<div id="xml_source">
<xsl:copy-of select="."/>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


порекомендовал бы всегда использовать конструкцию <xsl:copy><xsl:apply-templates /></xsl:copy>
результатом тогда будет:
<Root>123</Root> , а мне нужен весь фрагмент документа, да и изменения в написании тегов остаются :(
 

FB3

Новичок
А, так тут проблема в том, что javascript или браузер скорей всего не делает различия между регистром тэгов, так как в итоге отображаются они одинаково на странице.
Вот пример html:
PHP:
<html>
<body onload="alert(document.getElementById('xml_source').innerHTML);">
<div id="xml_source">
<Root>
<Something>1</Something>
<SomethingElse>2</SomethingElse>
<OneMoreSomeThing>3</OneMoreSomeThing> 
</Root>
</div>
</body>
</html>
Вторая проблема, с apply-templates, то что браузер не знает таких тэгов и соответственно, не выводит их в документ.
Если сделать так:
PHP:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="Root"> 
	<html>
		<body onload="alert(document.getElementById('xml_source').innerHTML);">
		<div id="xml_source">
			<xsl:apply-templates />
		</div>
		</body>
	</html> 
</xsl:template>

<xsl:template match="Something">
	<b><xsl:apply-templates /></b>
</xsl:template>

<xsl:template match="SomethingElse">
	<u><xsl:apply-templates /></u>
</xsl:template>

<xsl:template match="OneMoreSomeThing">
	<i><xsl:apply-templates /></i>
</xsl:template>

</xsl:stylesheet>
то ноды отлично матчатся именно в том регистре, в котором нужно.

Вообщем, проблема не в XSLT. Соответственно, возникает вопрос, для чего нужно это самое единообразие? Может быть оно не существенно вообще?
 

IIIEPJIOK

Новичок
Вторая проблема, с apply-templates, то что браузер не знает таких тэгов и соответственно, не выводит их в документ.
Если сделать так:
не-не-не, Вы меня не поняли,
результатом тогда будет:
<Root>123</Root> , а мне нужен весь фрагмент документа
здесь я имел ввиду, что ваше предложение не подходит, а не "научите меня преобразованию..."....
Еще раз:
Моя задача: скопировать фрагмент документа целиком, для этого и служит <xsl:copy-of>.
Проблема, это изменение написания имен тегов.

Соответственно, возникает вопрос, для чего нужно это самое единообразие?
Я писал:
меня это беспокоит не из эстетических соображений.
Я потом js-скриптом подгружаю еще один xsl-файл и делаю преобразование. Вот оно-то и не проходит, да бы за место моего <SomeTag> я имею либо <SOMETAG> или <sometag>
 

FB3

Новичок
Тогда я вижу следующие варианты:
1. Кто мешает сделать все преобразования в одном XSL файле / подключать в первый XSL файл другой XSL с помощью <xsl:include /> или <xsl:import />, а не подгружать javascript'ом другое преобразование. Это как раз к моему
Если сделать так:
2. Во-втором XSL файле матчить ноды не <xsl:template match="nodeName" />, а <xsl:template match="node()[translate(name(), 'алфавитбольшими', 'алфавитмаленькими') = 'nodename']" />.

Но второй вариант очень уж кривой получается.

Собственно, из 1 возникает вопрос, зачем нужно второй файл подгружать, когда можно сделать все намного проще?
 

IIIEPJIOK

Новичок
FB3
Спасибо Вам большое за участие.
Я для себя вопрос закрыл на том, что отказываюсь от xsl:copy-of и подгружаю XML отдельным запросом.


Кто мешает сделать все преобразования в одном XSL файле / подключать в первый XSL файл другой XSL с помощью <xsl:include /> или <xsl:import />, а не подгружать javascript'ом другое преобразование
Я с вами согласен, когда так можно сделать так, то так делать, а надо и не городить огород.
НО это не мой случай. Я не знаю, какой нужен конечный вид, пока пользователь мне не сообщит. Так, что без джава скрипта мне не обойтись.
Еще раз спасибо.
 

FB3

Новичок
Я для себя вопрос закрыл на том, что отказываюсь от xsl:copy-of и подгружаю XML отдельным запросом.
Ну да, тоже вариант :)
Я не знаю, какой нужен конечный вид, пока пользователь мне не сообщит. Так, что без джава скрипта мне не обойтись.
Хотя и тут можно попробовать рассмотреть предыдущие варианты, но надо знать больше о логике работы.
 
Сверху