Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QXmlQuery issue
Qt 6.11 is out! See what's new in the release blog

QXmlQuery issue

Scheduled Pinned Locked Moved General and Desktop
3 Posts 2 Posters 2.8k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    ac1975
    wrote on last edited by
    #1

    Hi,
    I have an xml file, and I need to convert it into a new xml file applying an xslt transformation.
    In my xslt file I have a xsl::choose element, in which are nested several xsl::when elements.
    The code I am using for this transformation is very simple:

    @QXmlQuery qry(QXmlQuery::XSLT20);
    qry.setFocus(QUrl("data.xml"));
    qry.setQuery(QUrl("transf.xslt"));
    QString result = "";
    qry.evaluateTo(&result);@

    I have experienced that if the number of xsl::when elements is greater than 23, I get the following error:
    Error XPST0003 in file:///D:/test/debug/transf.xslt, at line 154, column 14: memory exhausted
    Else, if I have less than 23 elements, removing randomly some elements, the transformation is applied successfully.
    Following is the xml file (data.xml):

    @<?xml version="1.0" encoding="ISO-8859-1"?>
    <RootDoc ConnectionID="1">
    <DOC>
    <TABLE Name="table1">
    <Tr ID="113"/>
    <Tr ID="240"/>
    </TABLE>
    </DOC>
    </RootDoc>@

    and the xslt file (transf.xslt):
    @<?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/RootDoc">
    <Studies>
    xsl:choose
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=240]">
    <Proc>
    <TypeId>1.2.1.1</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=239]">
    <Proc>
    <TypeId>1.2.1.2</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=241]">
    <Proc>
    <TypeId>1.2.1.3</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=114]">
    <Proc>
    <TypeId>1.2.2.1</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=115]">
    <Proc>
    <TypeId>1.2.2.2</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=116]">
    <Proc>
    <TypeId>1.2.2.3</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=9]">
    <Proc>
    <TypeId>1.2.3.1</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=29]">
    <Proc>
    <TypeId>1.2.3.3</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=31]">
    <Proc>
    <TypeId>1.2.3.5</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=27]">
    <Proc>
    <TypeId>1.2.3.6</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=24]">
    <Proc>
    <TypeId>1.2.3.7</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=25]">
    <Proc>
    <TypeId>1.2.3.8</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=28]">
    <Proc>
    <TypeId>1.2.3.8</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=30]">
    <Proc>
    <TypeId>1.2.3.8</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=32]">
    <Proc>
    <TypeId>1.2.3.8</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=33]">
    <Proc>
    <TypeId>1.2.3.8</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=227]">
    <Proc>
    <TypeId>1.3</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=228]">
    <Proc>
    <TypeId>2.1</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=83]">
    <Proc>
    <TypeId>2.5.2</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=225]">
    <Proc>
    <TypeId>2.6</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=147]">
    <Proc>
    <TypeId>3.1</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=149]">
    <Proc>
    <TypeId>3.2</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=153]">
    <Proc>
    <TypeId>3.3</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=152]">
    <Proc>
    <TypeId>3.4</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=74]">
    <Proc>
    <TypeId>3.5</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=148]">
    <Proc>
    <TypeId>4.2</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=291]">
    <Proc>
    <TypeId>5.1</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=232]">
    <Proc>
    <TypeId>5.2</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=234]">
    <Proc>
    <TypeId>5.4</TypeId>
    </Proc>
    </xsl:when>
    <xsl:when test="DOC/TABLE[@Name='table1']/Tr[@ID=235]">
    <Proc>
    <TypeId>5.5</TypeId>
    </Proc>
    </xsl:when>
    </xsl:choose>
    </Studies>
    </xsl:template>
    </xsl:stylesheet>@
    I am not able to find out the reason for this memory exhausted related problem.
    Using other tools like MS Visual Studio (xslt debugger), or notepad++ (xml plugin) the transformation is successfull with all the elements.
    Thanks, Andrea

    1 Reply Last reply
    0
    • A Offline
      A Offline
      ac1975
      wrote on last edited by
      #2

      In the absence of any answer, I solved the problem completely removing the QtXmlPatterns Module, and using libxslt. With the same xml data and the same xslt sheet, it works correctly.

      1 Reply Last reply
      0
      • D Offline
        D Offline
        DerekDomino
        wrote on last edited by
        #3

        Hello,

        My answer won't solve your problem but you could fill a bug report in about that: https://bugreports.qt-project.org

        Cheers

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved