D
Dimly
Доброго.
Возникла проблема в XSLT преобразовании данных с обработкой (форматированием) в процессе.
К примеру задача - поменять разделители "точка с запятой" на пробел. (о том чтобы заменить на тег <BR> - я уже молчу)
Имеем DATA.XML
Имеем FILE.XSL
Если такой ХМЛ открыть в IE - то все великолепно. Значение заменяет точку с запятой на пробел.
Но если (удалив из ХМЛ вторую строку) закинуть все в Java
то XMLOutput.toString() - возвращает HTML точно до первого вызова скрипта, и после него просто корректно закрывает все теги, не обрабатывая информаци., оставляя даже это поле пустым.
Кстати если сделать вот так (на ва скриптах) , то тоже работает
Переменная fff содержит корретный отработанный HTML.
Догадываюсь что это потому что само использование javaScript в XSL - фича MS... или же опять курил не те мануалы по яве.
(вместо xslt пробовал и msxslt - результат то же, да еще и явное использование фич MS)
Возникла проблема в XSLT преобразовании данных с обработкой (форматированием) в процессе.
К примеру задача - поменять разделители "точка с запятой" на пробел. (о том чтобы заменить на тег <BR> - я уже молчу)
Имеем DATA.XML
Код:
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="FILE.XSL"?>
.................................................................
<OfficePhone title="Office phone" value="1123 123;123;22" />
.................................................................
Имеем FILE.XSL
Код:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xslt="urn:schemas-microsoft-com:xslt"
xmlns:ext="urn:extension-functions"
exclude-result-prefixes="xslt ext">
<xslt:script language="JavaScript" implements-prefix="ext">
function arrau(st) {
var mArr = st.split(";")
var st2 = mArr.join(" ");
return st2;
}
</xslt:script>
<xsl:output encoding="Windows-1251" method='html' indent='yes'/>
<xsl:template match="/">
.................................................................
<TD class="reportCell"><xsl:value-of select="ext:arrau2(string(OfficePhone/@value))" /></TD>
.................................................................
Если такой ХМЛ открыть в IE - то все великолепно. Значение заменяет точку с запятой на пробел.
Но если (удалив из ХМЛ вторую строку) закинуть все в Java
Код:
TransformerFactory tFactory = TransformerFactory.newInstance();
InputStreamReader XSLInput = new InputStreamReader(new FileInputStream("FILE.xsl"), "Cp1251");
InputStreamReader XMLInput = new InputStreamReader(new FileInputStream("DATA.xml"), "CP1251");
Transformer transformer = tFactory.newTransformer(new StreamSource(XSLInput) );
transformer.transform(new StreamSource(XMLInput), new StreamResult(XMLOutput));
return XMLOutput.toString()
то XMLOutput.toString() - возвращает HTML точно до первого вызова скрипта, и после него просто корректно закрывает все теги, не обрабатывая информаци., оставляя даже это поле пустым.
Кстати если сделать вот так (на ва скриптах) , то тоже работает
Код:
source = new ActiveXObject("Microsoft.XMLDOM");
source.async = false;
style = new ActiveXObject("Microsoft.XMLDOM");
style.async = false;
source.load("DATA.XML");
style.load("FILE.xsl");
fff = source.transformNode(style);
f = new ActiveXObject("Scripting.FileSystemObject");
t = f.CreateTextFile("out.html", true);
t.Write(fff);
Переменная fff содержит корретный отработанный HTML.
Догадываюсь что это потому что само использование javaScript в XSL - фича MS... или же опять курил не те мануалы по яве.
(вместо xslt пробовал и msxslt - результат то же, да еще и явное использование фич MS)