Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / XML в дотнет / 12 сообщений из 12, страница 1 из 1
28.03.2006, 14:38
    #33629791
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Как получить результат в string после преобразования через xslt??

Нужно ручками обрезать кой-чего

Вот код

XslTransform xslTran = new XslTransform();
xslTran.Load(Context.Server.MapPath(@"\SMT\XSLT\transform.xslt"));
this.Response.Clear();
this.Response.Buffer=true;
System.IO.StringWriter swr = new System.IO.StringWriter();

xslTran.Transform(xml, null, swr);

А дальше что делать? Как получить стринг из Writer'a?

Меня просто бесит дотнетовская модель XML. Всё есть кроме самого необходимого. И в МСДН ничего по этому поводу.
...
Рейтинг: 0 / 0
28.03.2006, 14:39
    #33629797
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Собственно говоря, проблема в том, что transform засовывает в результат хидер, который мне совершенно не нужен
...
Рейтинг: 0 / 0
28.03.2006, 16:05
    #33630128
leo Resh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
А что за хидер Вас смущает, если не секрет?
...
Рейтинг: 0 / 0
28.03.2006, 16:11
    #33630148
leo Resh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
а строку получить просто:
Код: plaintext
1.
2.
swr.Flush();
string yourString = swr.ToString();
...
Рейтинг: 0 / 0
28.03.2006, 16:17
    #33630170
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Хидер смущает тем, что он имеет энкодинг утф-8 и Эксель свой хмл не понимает
...
Рейтинг: 0 / 0
28.03.2006, 16:20
    #33630184
leo Resh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Random_GoodmanХидер смущает тем, что он имеет энкодинг утф-8 и Эксель свой хмл не понимает
Тогда, может, правильный эенкодинг ему ставить? Если устраивает - напишу пример - как.
...
Рейтинг: 0 / 0
28.03.2006, 16:22
    #33630191
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Был бы очень благодарен; проблема в том, что у оригинального ХМЛ-файла ексель энкодинга вообще нет. А этот ХМЛ Эксель просто запихивает в первую ячейку и все.
...
Рейтинг: 0 / 0
28.03.2006, 16:41
    #33630254
leo Resh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
// считаем, что XmlDoc - это уже имеющийся объект типа XmlDocument
XPathNavigator myNav = XmlDoc.CreateNavigator();

string xslFile = "someFile.xsl"; // имя файл с XSLT
XslTransform xslt = new XslTransform();
xslt.Load(xslFile);

MemoryStream mStrm = new MemoryStream();
// делаем StreamWriter с енкодингом win- 1251  (к примеру) 
StreamWriter stw = new StreamWriter(mStrm,System.Text.Encoding.GetEncoding( 1251 ));

// делаем трансформацию
xslt.Transform(myNav,null,stw,(XmlResolver)null);
stw.Flush();
// сливаем данные из StreamWriter в байтовый массив
byte [] bOut = mStrm.ToArray();
			
// делаем Encoding для кодировки win- 1251  
System.Text.Encoding win1251 = System.Text.Encoding.GetEncoding( 1251 );

// строим массив символов (char) при помощи Encoding 
char[] asciiChars = new char[win1251.GetCharCount(bOut,  0 , bOut.Length)];
// заполняем массив символов (char) из результата трансформации при помощи Encoding :
win1251.GetChars(bOut,  0 , bOut.Length, asciiChars,  0 );

/*
ну, строчку получить из массива char дело нехитрое. 
А поскольку форум про asp.net, рискну предположить, что
результат преобразования надо слить в браузер.. 
Тогда прямо этот массив (asciiChars) и сливаем:
*/
Response.Write(asciiChars, 0 ,asciiChars.Length);

Результат трансформации будет в кодировке windows-2151
...
Рейтинг: 0 / 0
28.03.2006, 18:21
    #33630591
leo Resh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
leo ReshРезультат трансформации будет в кодировке windows-2151
1251 конечно. Опечатался.
...
Рейтинг: 0 / 0
28.03.2006, 18:22
    #33630594
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Еще 2 тупых вопроса:

1) Почему

<xsl:for-each select='Sheet'>
<Worksheet>
<xsl:attribute name="ss:Name"><xsl:value-of select='Name'></xsl:value-of></xsl:attribute>
<xsl:apply-templates select="XSheets"></xsl:apply-templates>
</Worksheet>
</xsl:for-each>
</Workbook>
</xsl:template>

<xsl:template match="XSheets">434
</xsl:template>

Не работает? Зато

<xsl:for-each select='Sheet'>
<Worksheet>
<xsl:attribute name="ss:Name"><xsl:value-of select='Name'></xsl:value-of></xsl:attribute>
434
</Worksheet>
</xsl:for-each>
</Workbook>
</xsl:template>

<xsl:template match="XSheets">434
</xsl:template>

превосходно работает?


2) Как в XSLT правильно выбрать значение атрибута родительского элемента?
...
Рейтинг: 0 / 0
28.03.2006, 18:23
    #33630597
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
leo Resh leo ReshРезультат трансформации будет в кодировке windows-2151
1251 конечно. Опечатался.

Спаксиб огромное!
...
Рейтинг: 0 / 0
30.03.2006, 15:35
    #33635473
Random_Goodman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML в дотнет
Еще вопросы по XML
Когда я преобразую XML через XSLT, на выходе стреам врайтера разные символы типа " заменяются на теги &qt и проч. Можно этого как-то избежать?
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / XML в дотнет / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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