Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Как преобразовать xml в html   Найти похожие ветки 

 
Дмитрий В. Белькевич   (2005-01-06 13:18) [0]

Сабж, в общем. Все архивы сайта сейчас выложены в формате xml, ищейка (sleuthhound) не знает такой формат. Чем преобразовать эти файлы? Желательно в batch-режиме.


 
DiamondShark ©   (2005-01-06 13:25) [1]

Известно чем: XSLT.
Для batch-режима можно написать простенький скрипт (на VBScript или JScript), использующий msxml.


 
Чеширский_Кот ©   (2005-01-06 14:33) [2]

TDOMDocument


 
Дмитрий В. Белькевич   (2005-01-07 13:58) [3]

Поздравляю всех с праздником!
Спасибо за ответы. Может кто знает готовый софт? Самому писать - времени совсем мало.


 
_dimka   (2005-01-07 14:01) [4]

Ну могу предложить только метод Dmitry O. :)


 
Чеширский_Кот ©   (2005-01-07 14:02) [5]

Роуз написал вроде


 
Дмитрий В. Белькевич   (2005-01-07 15:00) [6]

Господа, если не сложно, уточните, что за метод Dmitry O., и что Роуз написал?


 
Чеширский_Кот ©   (2005-01-07 15:42) [7]

у Роуза на сайте видел прогу (с исходниками), которая делала то, что ты хочешь


 
Дмитрий В. Белькевич   (2005-01-08 15:13) [8]

http://rouse.front.ru/?
Сайт не доступен :(


 
jack128 ©   (2005-01-08 16:50) [9]

Дмитрий В. Белькевич   (08.01.05 15:13) [8]
Ямщик, ты гонишь ;-)
Правда нужной тебе программки я что то не вижу..


 
Чеширский_Кот ©   (2005-01-08 20:56) [10]

http://rouse.front.ru/ConvertSrc.zip


 
DiamondShark ©   (2005-01-08 23:03) [11]


> Самому писать - времени совсем мало.

Ой, да ладно! А сутки ждать ответа времени много?
Тем более, что там писать-то... Тьфу!


Function LoadDoc(sFileName)
 Dim oDoc
 Dim oErr

 Set oDoc = CreateObject("MSXML2.FreeThreadedDOMDocument")
 oDoc.async = False
 oDoc.resolveExternals = False
 If Not oDoc.load(sFileName) Then
   Set oErr = oDoc.parseError
   WScript.StdErr.WriteLine sFileName & " (" & oErr.line & ", " & oErr.linepos & ")"
   WScript.StdErr.WriteLine oErr.reason
   WScript.Quit(1)
 End If
 Set LoadDoc = oDoc
End Function

Dim oXml
Dim oXsl
Dim oOutput
Dim oXslt
Dim oProc

If WScript.Arguments.length <> 3 Then
 WScript.StdOut.WriteLine "Usage:"
 WScript.StdOut.WriteLine "cscript.exe " & WScript.ScriptName & " xml_file.xml xsl_file.xsl output_file.ext"
 WScript.Quit(0)
End If

Set oXml = LoadDoc(WScript.Arguments(0))
Set oXsl = LoadDoc(WScript.Arguments(1))

Set oXslt = CreateObject("MSXML2.XSLTemplate")
oXslt.stylesheet = oXsl
Set oProc = oXslt.createProcessor
oProc.input = oXml

Set oOutput = CreateObject("ADODB.Stream")
oOutput.Type = 1
oOutput.Open

oProc.output = oOutput
oProc.transform

oOutput.SaveToFile WScript.Arguments(2), 2
oOutput.Close


Примечания:
Сохранить в файле, ну скажем, convert.vbs
Запускать из командной строки
cscript convert.vbs xml_file.xml stylesheet.xsl output.html
XSL-файлы есть в архиве
Желательно добавить в XSL элемент
<xsl:output method="html" encoding="windows-1251" />
Без этого элемента вывод будет в UTF-16


 
Дмитрий В. Белькевич   (2005-01-09 05:36) [12]

Всем спасибо.

>Ой, да ладно! А сутки ждать ответа времени много?

Так я никуда собсно и не спешу ;) Архивы с начала года лежат в таком виде, старых хватает, да вот, захотелось таки обновить, порылся в инете - ну нигде нет готового.

>Тем более, что там писать-то... Тьфу!

Ну, я ж не требую - я прошу. Если есть, то дайте. Зачем энтропию увеличивать? TVelosiped уже достаточное число раз написан. ИМХО. В написании не вижу для себя никакой практической пользы - технология для меня совершенно (по райней мере, пока) не нужная, на самом деле есть и так с чем ковыряться.


 
Дмитрий В. Белькевич   (2005-01-09 05:41) [13]

>>Самому писать - времени совсем мало.

>Ой, да ладно! А сутки ждать ответа времени много?

Имелось в виду, свободного времени, конечно же. Времени ждать предостаточно, но уж за год надо таки как-то собраться базу ищейки обновить.


 
programania ©   (2005-01-19 20:44) [14]

Недавно за полдня написал программу для преобразования
архивов XML этого форума в нормальный вид,
может кому и подойдет,  а если что не так
всегда можно поправить потому как текст прилагаю.
Извините что большая вышла:

//Преобразование архивов форума DelphiMaster.ru из XML в HTM
//распакуйте архив форума в папку с программой,
//запустите эту программу и немного подождите: 20сек на 400мгц
program forum;//alpha
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, shellApi;

var
imf:string;
t,tt,tx,th,tf,tfh:textFile;
dsc,n,id,lgn,title,tit,dt,tema,count,answers,s,sf,sx,txt,nameF,imh,imx:string;
i,np:integer;

PROCEDURE wel(var s:string; n:string; var z:string);
var c:char; k:string;
begin
//выделение элемента, начинающегося с n из строки s в z
z:="";
i:=pos(n,s);
if i>0 then begin
 c:=n[length(n)];
 if c=">" then k:="</"+copy(n,2,255) else k:=c;
 delete(s,1,i+length(n)-1);
 i:=pos(k,s);
 if i>0 then z:=copy(s,1,i-1)
end;
end;

PROCEDURE zamena(old,new:string);
begin
while pos(old,sx)>0 do //замена строк в строке sx
sx:=copy(sx,1,pos(old,sx)-1)+new+copy(sx,pos(old,sx)+length(old),$FFFFFF);
end;

PROCEDURE begin_Htm(var tt:textFile; im:string);
begin
assignFile(tt,im); rewrite(tt); writeln(tt,"<html><body bgColor=#f0eeee>",
"<style type="text/css">",
"a {color:#0033BB}",//чтоб ссылки были одного цвета
"H4 {MARGIN-BOTTOM: 5px; FONT: bold 11pt Arial; COLOR: #8f0000}",//заголовок темы
"</style><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">");
end;

PROCEDURE end_Htm(var tt:textFile);
begin
writeln(tt,"</body></html>"); closeFile(tt);
end;

PROCEDURE forum1(imf:string);
begin
assignFile(t,imf);
{$i-}reset(t);{$i+}
if ioresult<>0 then begin showMessage("Не нашла"#13+imf);exit end;

begin_Htm(th,changeFileExt(imf,".htm"));  //th-заголовки тем в htm
dsc:=""; n:=""; id:="";
while not eof(t) do begin
 readln(t,s);
 wel(s," dsc="",dsc);
 wel(s," n="",n);
 if dsc<>"" then writeln(th,"<h3>",dsc,"</h3>");
 repeat
 wel(s," id="",id);
 if id<>"" then begin
   tema:=n+"-"+id;
   assignFile(tx,tema+".xml");  //tx-тема в xml

   tema:=tema+".htm";
   wel(s," title="",title);
   wel(s," dsc="",dsc);
   wel(s," count="",count);
   wel(s," answers="",answers);
   writeln(th,"<a href="",tema,"">",title,"</a> ",count,": ",
     answers,"<br>","<font size=-1>",dsc,"</font><br><br>");
   begin_Htm(tt,tema);        //tt-тема в htm
   {$i-}reset(tx);{$i+}      //tx-тема в xml
   if ioresult=0 then begin
     np:=0; //номер послания
     while not eof(tx) do begin
       readln(tx,sx);
       zamena("<br/><br/>","<br/>"); //чтоб поменьше пустых строк
       zamena("","<font color=#0044BB>");//цвет кода
       zamena("
","</font>");
       repeat
         wel(sx," dt="",dt);   //дата
         wel(sx," tit="",tit); //титул темы
         wel(sx,"<lgn>",lgn);  //логин
         wel(sx,"<txt>",txt);  //текст послания
         if tit<>"" then tit:="<H4>"+tit+"</h4>";
         dt:="<font color=#808080>"+dt+"</font>)";
         if np>0 then dt:=dt+" <font size=-1> ["+intToStr(np)+"]</font>";
         inc(np);
         if txt<>"" then
         writeln(tt,tit,"",lgn," (",dt,"<br>",txt,"<br><br>");
       until (lgn="")or(txt="");
     end;
     closeFile(tx);
   end;
   end_Htm(tt);
 end;
 until id="";
end;
end_Htm(th);
closeFile(t);
end;

begin
Application.Initialize;
Application.Run;
imf:=paramstr(1);
if imf="" then imf:="forums.xml";
assignFile(tf,imf);
{$i-}reset(tf);{$i+}
if ioresult<>0 then begin
 showMessage("Не нашла"#13+imf+#13+"укажи другое в параметре запуска");halt
end;

imf:=changeFileExt(imf,".htm");
begin_Htm(tfh,imf);writeln(tfh,"<H4>ФОРУМЫ</h4>");

while not eof(tf) do begin
 readln(tf,sf);
 repeat
   wel(sf," name="",imx);
   wel(sf," txt="", nameF);
   wel(sf," dsc="", dsc);
   if (imx<>"")and(nameF<>"") then begin
     imh:=changeFileExt(imx,".htm");
     writeln(tfh,"<br><a href="",imh,"">",nameF,"</a><br>",dsc,"<br>");
     forum1(imx);
   end
 until (imx="")or(nameF="");
end;
end_htm(tfh);

ShellExecute(0,"open",pChar(imf),nil,pChar(GetCurrentDir),SW_NORMAL);
end.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.041 c
9-1099511911
Jack
2004-11-03 22:58
2005.02.06
GLScene, Как определить пересечение 2-х объектов ?


1-1106496883
tazik
2005-01-23 19:14
2005.02.06
Программируемый калькулятор


1-1106062293
Дмитрий В. Белькевич
2005-01-18 18:31
2005.02.06
Как изменить границы страницы принтера?


3-1104688120
mihail2209
2005-01-02 20:48
2005.02.06
Вопрос по ClientDataSet - как можно выполнить запрос SQL с ...


14-1105967316
Чеширский_Кот
2005-01-17 16:08
2005.02.06
Sheep in the big city





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский