Russian Qt Forum

Qt => XML => Тема начата: ixSci от Июль 30, 2009, 14:49



Название: Qt не верно обрабатывает XPath в XSLT?
Отправлено: ixSci от Июль 30, 2009, 14:49
Всем доброго времени суток,

У меня есть следующий код:
Код
C++ (Qt)
QCoreApplication xApplication(argc, argv);
 
   QXmlQuery xQuery(QXmlQuery::XSLT20);
   QBuffer xOriginalContent;
   QString xXMLContent = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><folder id=\"0\" name=\"root\" is_expanded=\"false\"></folder>";
   xOriginalContent.setData( xXMLContent.toAscii() );
   xOriginalContent.open(QBuffer::ReadWrite);
   xOriginalContent.reset();
 
   xQuery.setFocus(&xOriginalContent);
   QString xRequestString;
   xRequestString += "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                               "<xsl:stylesheet version=\"2.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"
                               "   <xsl:template match=\"/\">"
                               "       <xsl:apply-templates/>"
                               "   </xsl:template>"
                               "   <xsl:template match=\"folder\">"
                               "       <folder name=\"{@name}\" id=\"{@id}\"  is_expanded=\"{@is_expanded}\">"
                               "           <xsl:copy-of select=\"child::node()\"/>"
                               "           <xsl:if test=\"@id=0\">"
                               "               <folder id=\"1\" name=\"name\"> </folder>"
                               "           </xsl:if>"
                               "       </folder>"
                               "   </xsl:template>"
                               "   <xsl:template match=\"*\">"
                               "       <xsl:copy-of select=\".\"/>"
                               "   </xsl:template>"
                               "</xsl:stylesheet>";
 
   xQuery.setQuery(xRequestString);      
   assert(xQuery.isValid());
   QBuffer xOutputContent;
   xOutputContent.open(QBuffer::ReadWrite);
   xOutputContent.reset();
   xQuery.evaluateTo(&xOutputContent);
   return xApplication.exec();
 
который в результате должен дать:
Цитировать
<folder name="root" id="0" is_expanded="false"><folder id="1" name="name"/></folder>
Но на деле дает
Цитировать
<folder name="root" id="" is_expanded=""><folder id="1" name="name"/></folder>
Это происходит потому,что не отрабатывают инструкции для XPath <folder name=\"{@name}\" id=\"{@id}\"  is_expanded=\"{@is_expanded}\">". Т.е всегда отрабатывает только первая инструкция, а остальные игнорятся.
Кто -нибудь сталкивался с подобным? Или мне стоит писать в qtsoftware и спрашивать их?

Всем спасибо за внимание к моей проблеме.


Название: Re: Qt не верно обрабатывает XPath в XSLT?
Отправлено: ixSci от Август 04, 2009, 10:22
Проблема исправлена в Qt 4.5.2. Закрыто.