Russian Qt Forum

Qt => XML => Тема начата: Astrologer от Сентябрь 27, 2010, 10:29



Название: Сохранение XSL
Отправлено: Astrologer от Сентябрь 27, 2010, 10:29
Всем привет. мне нужно сохранить такую строку - <?xml-stylesheet type="text/xsl" href="myXSL.xsl"?>
Пишу:
Код:
 QFile file("d:\\dbf\\dom.xml");
    QXmlStreamWriter stream(&file);
    file.open(QIODevice::WriteOnly);
    stream.setAutoFormatting(true);
    stream.setCodec("windows-1251");
    stream.writeStartDocument();
    XslNameFile = "myXSL.xsl";
    QString styleSheet = "\n<?xml-stylesheet type=\"text/xsl\" href=\"";
    styleSheet.append(XslNameFile);
    styleSheet+= "\"?>\n";
    stream.writeEntityReference(styleSheet);
    stream.writeStartElement("bookmark");
    stream.writeAttribute("href", "http://qt.nokia.com/");
    stream.writeTextElement("title", "Qt Home");
    stream.writeEndElement(); // bookmark
    stream.writeEndDocument();
    file.close();

На выходе:
Код:
<?xml version="1.0" encoding="windows-1251"?>&
<?xml-stylesheet type="text/xsl" href="myXSL.xsl"?>
;<bookmark href="http://qt.nokia.com/">
    <title>Qt Home</title>
</bookmark>

Почему вставляется ";"  как от нее избавиться? Заранее спасибо  :)


Название: Re: Сохранение XSL
Отправлено: Astrologer от Сентябрь 27, 2010, 12:48
Решение:
Код:
QDomDocument doc;
    QString temp = "type=\"text/sql\" href=\"";
    temp.append(XslNameFile);
    temp+= "\"";
    QDomProcessingInstruction xmlDeclaration = doc.createProcessingInstruction(
            "xml", "version=\"1.0\" encoding=\"windows-1251\"");
    QDomProcessingInstruction styleDeclaration = doc.createProcessingInstruction(
            "xml-stylesheet", temp);
    doc.appendChild(xmlDeclaration);
...here goes the routine


Название: Re: Сохранение XSL
Отправлено: deaks от Сентябрь 27, 2010, 13:55
Да, DOM тут будет удобнее всего
Ну или чтобы вообще не ошибиться используйте потоковый вывод -

Код:
QTextStream tmp(&pFile);
tmp.setCodec("UTF-8");
tmp << "<tmp>\n"
      << "    <subtmp>" << та та та << та та та \n
...
      << "</tmp>\n";

Но сами понимаете это изврат)))))


Название: Re: Сохранение XSL
Отправлено: Astrologer от Сентябрь 27, 2010, 14:51
Тоже вариант - если уж совсем замучаюсь)) Теперь бьюсь над
Код:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Как его записать средствами QDomDocument? Если так:
Код:
QDomDocument doc;
    QDomProcessingInstruction xmlDeclaration = doc.createProcessingInstruction(
            "xml", "version=\"1.0\" encoding=\"windows-1251\"");
    doc.appendChild(xmlDeclaration);
    QDomElement xslElement = doc.createElement("xsl:stylesheet");
    xslElement.setAttribute("version", "1.0");
    xslElement.setAttribute("xmlns:xsl", "http://www.w3.org/1999/XSL/Transform");
    doc.appendChild(xslElement);

То на выходе:
Код:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>