Russian Qt Forum
Ноябрь 22, 2024, 17:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сохранение XSL  (Прочитано 3941 раз)
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>

Почему вставляется ";"  как от нее избавиться? Заранее спасибо  Улыбающийся
Записан
Astrologer
Гость
« Ответ #1 : Сентябрь 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
Записан
deaks
Гость
« Ответ #2 : Сентябрь 27, 2010, 13:55 »

Да, DOM тут будет удобнее всего
Ну или чтобы вообще не ошибиться используйте потоковый вывод -

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

Но сами понимаете это изврат)))))
Записан
Astrologer
Гость
« Ответ #3 : Сентябрь 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"/>
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.