Всем доброго времени суток,
У меня есть следующий код:
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 и спрашивать их?
Всем спасибо за внимание к моей проблеме.
Проблема исправлена в Qt 4.5.2. Закрыто.