[Libreoffice-commits] core.git: sc/source

Mohammed Abdul Azeem azeemmysore at gmail.com
Thu Jul 27 19:23:26 UTC 2017


 sc/source/filter/xml/xmldpimp.cxx | 1384 ++++++++++++++++----------------------
 sc/source/filter/xml/xmldpimp.hxx |  208 +----
 sc/source/filter/xml/xmlfilti.cxx |   75 --
 sc/source/filter/xml/xmlfilti.hxx |    7 
 4 files changed, 690 insertions(+), 984 deletions(-)

New commits:
commit e89548c16b39cd716925cc23f2eb9e54748233c7
Author: Mohammed Abdul Azeem <azeemmysore at gmail.com>
Date:   Sun Jul 23 20:04:33 2017 +0530

    Moving legacy contexts to FastContexts:
    
    ScXMLDataPilotTableContext
    ScXMLDPSourceSQLContext
    ScXMLDPSourceTableContext
    ScXMLDPSourceQueryContext
    ScXMLSourceServiceContext
    ScXMLDataPilotGrandTotalContext
    ScXMLSourceCellRangeContext
    ScXMLDataPilotFieldContext
    ScXMLDataPilotFieldReferenceContext
    ScXMLDataPilotLevelContext
    ScXMLDataPilotDisplayInfoContext
    ScXMLDataPilotSortInfoContext
    ScXMLDataPilotLayoutInfoContext
    ScXMLDataPilotSubTotalsContext
    ScXMLDataPilotSubTotalContext
    ScXMLDataPilotMembersContext
    ScXMLDataPilotMemberContext
    ScXMLDataPilotGroupsContext
    ScXMLDataPilotGroupContext
    ScXMLDataPilotGroupMemberContext
    ScXMLDPFilterContext
    
    Change-Id: Ie01ddb0f740a1b41a44e4abc9fe1bea3ab32cb12
    Reviewed-on: https://gerrit.libreoffice.org/40326
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/sc/source/filter/xml/xmldpimp.cxx b/sc/source/filter/xml/xmldpimp.cxx
index f6fb88942fc8..27dfb894a7dd 100644
--- a/sc/source/filter/xml/xmldpimp.cxx
+++ b/sc/source/filter/xml/xmldpimp.cxx
@@ -69,25 +69,22 @@ ScXMLDataPilotTablesContext::~ScXMLDataPilotTablesContext()
     GetScImport().UnlockSolarMutex();
 }
 
-SvXMLImportContext *ScXMLDataPilotTablesContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotTablesContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotTablesElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_DATA_PILOT_TABLE :
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_TABLE ) :
         {
-            pContext = new ScXMLDataPilotTableContext( GetScImport(), nPrefix,
-                                                          rLName, xAttrList);
+            pContext = new ScXMLDataPilotTableContext( GetScImport(), nElement, xAttrList);
         }
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
@@ -96,10 +93,9 @@ ScXMLDataPilotTableContext::GrandTotalItem::GrandTotalItem() :
     mbVisible(true) {}
 
 ScXMLDataPilotTableContext::ScXMLDataPilotTableContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList) :
+    ScXMLImportContext( rImport ),
     pDoc(GetScImport().GetDocument()),
     pDPObject(nullptr),
     pDPDimSaveData(nullptr),
@@ -120,88 +116,86 @@ ScXMLDataPilotTableContext::ScXMLDataPilotTableContext( ScXMLImport& rImport,
     bDrillDown(true),
     bHeaderGridLayout(false)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotTableAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_NAME :
-            {
-                sDataPilotTableName = sValue;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_APPLICATION_DATA :
+            switch (aIter.getToken())
             {
-                sApplicationData = sValue;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_GRAND_TOTAL :
-            {
-                if (IsXMLToken(sValue, XML_BOTH))
+                case XML_ELEMENT( TABLE, XML_NAME ):
                 {
-                    maRowGrandTotal.mbVisible = true;
-                    maColGrandTotal.mbVisible = true;
+                    sDataPilotTableName = aIter.toString();
                 }
-                else if (IsXMLToken(sValue, XML_ROW))
+                break;
+                case XML_ELEMENT( TABLE, XML_APPLICATION_DATA ):
                 {
-                    maRowGrandTotal.mbVisible = true;
-                    maColGrandTotal.mbVisible = false;
+                    sApplicationData = aIter.toString();
                 }
-                else if (IsXMLToken(sValue, XML_COLUMN))
+                break;
+                case XML_ELEMENT( TABLE, XML_GRAND_TOTAL ):
                 {
-                    maRowGrandTotal.mbVisible = false;
-                    maColGrandTotal.mbVisible = true;
+                    if (IsXMLToken(aIter, XML_BOTH))
+                    {
+                        maRowGrandTotal.mbVisible = true;
+                        maColGrandTotal.mbVisible = true;
+                    }
+                    else if (IsXMLToken(aIter, XML_ROW))
+                    {
+                        maRowGrandTotal.mbVisible = true;
+                        maColGrandTotal.mbVisible = false;
+                    }
+                    else if (IsXMLToken(aIter, XML_COLUMN))
+                    {
+                        maRowGrandTotal.mbVisible = false;
+                        maColGrandTotal.mbVisible = true;
+                    }
+                    else
+                    {
+                        maRowGrandTotal.mbVisible = false;
+                        maColGrandTotal.mbVisible = false;
+                    }
                 }
-                else
+                break;
+                case XML_ELEMENT( TABLE, XML_IGNORE_EMPTY_ROWS ):
                 {
-                    maRowGrandTotal.mbVisible = false;
-                    maColGrandTotal.mbVisible = false;
+                    bIgnoreEmptyRows = IsXMLToken(aIter, XML_TRUE);
                 }
+                break;
+                case XML_ELEMENT( TABLE, XML_IDENTIFY_CATEGORIES ):
+                {
+                    bIdentifyCategories = IsXMLToken(aIter, XML_TRUE);
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ):
+                {
+                    sal_Int32 nOffset(0);
+                    bTargetRangeAddress = ScRangeStringConverter::GetRangeFromString( aTargetRangeAddress, aIter.toString(), pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset );
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_BUTTONS ):
+                {
+                    sButtons = aIter.toString();
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_SHOW_FILTER_BUTTON ):
+                {
+                    bShowFilter = IsXMLToken(aIter, XML_TRUE);
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_DRILL_DOWN_ON_DOUBLE_CLICK ):
+                {
+                    bDrillDown = IsXMLToken(aIter, XML_TRUE);
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_HEADER_GRID_LAYOUT ):
+                {
+                    bHeaderGridLayout = IsXMLToken(aIter, XML_TRUE);
+                }
+                break;
             }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_IGNORE_EMPTY_ROWS :
-            {
-                bIgnoreEmptyRows = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_IDENTIFY_CATEGORIES :
-            {
-                bIdentifyCategories = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_TARGET_RANGE_ADDRESS :
-            {
-                sal_Int32 nOffset(0);
-                bTargetRangeAddress = ScRangeStringConverter::GetRangeFromString( aTargetRangeAddress, sValue, pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset );
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_BUTTONS :
-            {
-                sButtons = sValue;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_SHOW_FILTER_BUTTON :
-            {
-                bShowFilter = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_DRILL_DOWN :
-            {
-                bDrillDown = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_DATA_PILOT_TABLE_ATTR_HEADER_GRID_LAYOUT :
-            {
-                bHeaderGridLayout = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
         }
     }
 
@@ -213,58 +207,56 @@ ScXMLDataPilotTableContext::~ScXMLDataPilotTableContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotTableContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotTableContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotTableElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SQL :
+        case XML_ELEMENT( TABLE, XML_DATABASE_SOURCE_SQL ):
         {
-            pContext = new ScXMLDPSourceSQLContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+            pContext = new ScXMLDPSourceSQLContext(GetScImport(), nElement, xAttrList, this);
             nSourceType = SQL;
         }
         break;
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_TABLE :
+        case XML_ELEMENT( TABLE, XML_DATABASE_SOURCE_TABLE ):
         {
-            pContext = new ScXMLDPSourceTableContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+            pContext = new ScXMLDPSourceTableContext(GetScImport(), nElement, xAttrList, this);
             nSourceType = TABLE;
         }
         break;
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_QUERY :
+        case XML_ELEMENT( TABLE, XML_DATABASE_SOURCE_QUERY ):
         {
-            pContext = new ScXMLDPSourceQueryContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+            pContext = new ScXMLDPSourceQueryContext(GetScImport(), nElement, xAttrList, this);
             nSourceType = QUERY;
         }
         break;
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SERVICE :
+        case XML_ELEMENT( TABLE, XML_SOURCE_SERVICE ):
         {
-            pContext = new ScXMLSourceServiceContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+            pContext = new ScXMLSourceServiceContext(GetScImport(), nElement, xAttrList, this);
             nSourceType = SERVICE;
         }
         break;
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_GRAND_TOTAL:
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_GRAND_TOTAL_EXT:
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_GRAND_TOTAL ):
+        case XML_ELEMENT( TABLE_EXT, XML_DATA_PILOT_GRAND_TOTAL ):
         {
-            pContext = new ScXMLDataPilotGrandTotalContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+            pContext = new ScXMLDataPilotGrandTotalContext(GetScImport(), nElement, xAttrList, this);
         }
         break;
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_CELL_RANGE :
+        case XML_ELEMENT( TABLE, XML_SOURCE_CELL_RANGE ):
         {
-            pContext = new ScXMLSourceCellRangeContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+            pContext = new ScXMLSourceCellRangeContext(GetScImport(), nElement, xAttrList, this);
             nSourceType = CELLRANGE;
         }
         break;
-        case XML_TOK_DATA_PILOT_TABLE_ELEM_DATA_PILOT_FIELD :
-            pContext = new ScXMLDataPilotFieldContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_FIELD ):
+            pContext = new ScXMLDataPilotFieldContext(GetScImport(), nElement, xAttrList, this);
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
@@ -459,7 +451,7 @@ void ScXMLDataPilotTableContext::AddGroupDim(const ScDPSaveGroupDimension& aGrou
     pDPDimSaveData->AddGroupDimension(aGroupDim);
 }
 
-void ScXMLDataPilotTableContext::EndElement()
+void SAL_CALL ScXMLDataPilotTableContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     if (!bTargetRangeAddress)
         return;
@@ -583,40 +575,31 @@ void ScXMLDataPilotTableContext::SetGrandTotal(
 }
 
 ScXMLDPSourceSQLContext::ScXMLDPSourceSQLContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotTableContext* pTempDataPilotTable) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotTable(pTempDataPilotTable)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceSQLAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_SOURCE_SQL_ATTR_DATABASE_NAME :
+            switch (aIter.getToken())
             {
-                pDataPilotTable->SetDatabaseName(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_SQL_ATTR_SQL_STATEMENT :
-            {
-                pDataPilotTable->SetSourceObject(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_SQL_ATTR_PARSE_SQL_STATEMENT :
-            {
-                pDataPilotTable->SetNative(!IsXMLToken(sValue, XML_TRUE));
+                case XML_ELEMENT( TABLE, XML_DATABASE_NAME ):
+                    pDataPilotTable->SetDatabaseName(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_SQL_STATEMENT ):
+                    pDataPilotTable->SetSourceObject(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_PARSE_SQL_STATEMENT ):
+                    pDataPilotTable->SetNative(!IsXMLToken(aIter, XML_TRUE));
+                break;
             }
-            break;
         }
     }
 }
@@ -625,47 +608,30 @@ ScXMLDPSourceSQLContext::~ScXMLDPSourceSQLContext()
 {
 }
 
-SvXMLImportContext *ScXMLDPSourceSQLContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
-}
-
-void ScXMLDPSourceSQLContext::EndElement()
-{
-}
-
 ScXMLDPSourceTableContext::ScXMLDPSourceTableContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotTableContext* pTempDataPilotTable) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotTable(pTempDataPilotTable)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceTableAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_SOURCE_TABLE_ATTR_DATABASE_NAME :
+            switch (aIter.getToken())
             {
-                pDataPilotTable->SetDatabaseName(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_TABLE_ATTR_TABLE_NAME :
-            {
-                pDataPilotTable->SetSourceObject(sValue);
+                case XML_ELEMENT( TABLE, XML_DATABASE_NAME ):
+                    pDataPilotTable->SetDatabaseName(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_TABLE_NAME ):
+                case XML_ELEMENT( TABLE, XML_DATABASE_TABLE_NAME ):
+                    pDataPilotTable->SetSourceObject(aIter.toString());
+                break;
             }
-            break;
         }
     }
 }
@@ -674,47 +640,29 @@ ScXMLDPSourceTableContext::~ScXMLDPSourceTableContext()
 {
 }
 
-SvXMLImportContext *ScXMLDPSourceTableContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
-}
-
-void ScXMLDPSourceTableContext::EndElement()
-{
-}
-
 ScXMLDPSourceQueryContext::ScXMLDPSourceQueryContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotTableContext* pTempDataPilotTable) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotTable(pTempDataPilotTable)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDatabaseRangeSourceQueryAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_SOURCE_QUERY_ATTR_DATABASE_NAME :
+            switch (aIter.getToken())
             {
-                pDataPilotTable->SetDatabaseName(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_QUERY_ATTR_QUERY_NAME :
-            {
-                pDataPilotTable->SetSourceObject(sValue);
+                case XML_ELEMENT( TABLE, XML_DATABASE_NAME ):
+                    pDataPilotTable->SetDatabaseName(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_QUERY_NAME ):
+                    pDataPilotTable->SetSourceObject(aIter.toString());
+                break;
             }
-            break;
         }
     }
 }
@@ -723,62 +671,38 @@ ScXMLDPSourceQueryContext::~ScXMLDPSourceQueryContext()
 {
 }
 
-SvXMLImportContext *ScXMLDPSourceQueryContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
-}
-
-void ScXMLDPSourceQueryContext::EndElement()
-{
-}
-
 ScXMLSourceServiceContext::ScXMLSourceServiceContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotTableContext* pTempDataPilotTable) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotTable(pTempDataPilotTable)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotTableSourceServiceAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_SOURCE_SERVICE_ATTR_NAME :
-            {
-                pDataPilotTable->SetServiceName(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_SERVICE_ATTR_SOURCE_NAME :
-            {
-                pDataPilotTable->SetServiceSourceName(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_SERVICE_ATTR_OBJECT_NAME :
-            {
-                pDataPilotTable->SetServiceSourceObject(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_SERVICE_ATTR_USER_NAME :
+            switch (aIter.getToken())
             {
-                pDataPilotTable->SetServiceUsername(sValue);
-            }
-            break;
-            case XML_TOK_SOURCE_SERVICE_ATTR_PASSWORD :
-            {
-                pDataPilotTable->SetServicePassword(sValue);
+                case XML_ELEMENT( TABLE, XML_NAME ):
+                    pDataPilotTable->SetServiceName(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_SOURCE_NAME ):
+                    pDataPilotTable->SetServiceSourceName(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_OBJECT_NAME ):
+                    pDataPilotTable->SetServiceSourceObject(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_USER_NAME ):
+                    pDataPilotTable->SetServiceUsername(aIter.toString());
+                break;
+                case XML_ELEMENT( TABLE, XML_PASSWORD ):
+                    pDataPilotTable->SetServicePassword(aIter.toString());
+                break;
             }
-            break;
         }
     }
 }
@@ -787,53 +711,41 @@ ScXMLSourceServiceContext::~ScXMLSourceServiceContext()
 {
 }
 
-SvXMLImportContext *ScXMLSourceServiceContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
-}
-
-void ScXMLSourceServiceContext::EndElement()
-{
-}
-
 ScXMLDataPilotGrandTotalContext::ScXMLDataPilotGrandTotalContext(
-    ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, const Reference<XAttributeList>& xAttrList,
+    ScXMLImport& rImport, sal_Int32 /*nElement*/, const Reference<xml::sax::XFastAttributeList>& xAttrList,
     ScXMLDataPilotTableContext* pTableContext ) :
-    ScXMLImportContext( rImport, nPrefix, rLName ),
+    ScXMLImportContext( rImport ),
     mpTableContext(pTableContext),
     meOrientation(NONE),
     mbVisible(false)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotGrandTotalAttrTokenMap();
-    for (sal_Int16 i = 0; i < nAttrCount; ++i)
+    if ( xAttrList.is() )
     {
-        const OUString& rAttrName  = xAttrList->getNameByIndex(i);
-        const OUString& rAttrValue = xAttrList->getValueByIndex(i);
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        OUString aLocalName;
-        sal_uInt16 nLocalPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(rAttrName, &aLocalName);
-        switch (rAttrTokenMap.Get(nLocalPrefix, aLocalName))
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY:
-                mbVisible = IsXMLToken(rAttrValue, XML_TRUE);
-            break;
-            case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_ORIENTATION:
-                if (IsXMLToken(rAttrValue, XML_BOTH))
-                    meOrientation = BOTH;
-                else if (IsXMLToken(rAttrValue, XML_ROW))
-                    meOrientation = ROW;
-                else if (IsXMLToken(rAttrValue, XML_COLUMN))
-                    meOrientation = COLUMN;
-            break;
-            case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME:
-            case XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME_EXT:
-                maDisplayName = rAttrValue;
-            break;
-            default:
+            switch (aIter.getToken())
+            {
+                case XML_ELEMENT( TABLE, XML_DISPLAY ):
+                    mbVisible = IsXMLToken(aIter, XML_TRUE);
                 break;
+                case XML_ELEMENT( TABLE, XML_ORIENTATION ):
+                    if (IsXMLToken(aIter, XML_BOTH))
+                        meOrientation = BOTH;
+                    else if (IsXMLToken(aIter, XML_ROW))
+                        meOrientation = ROW;
+                    else if (IsXMLToken(aIter, XML_COLUMN))
+                        meOrientation = COLUMN;
+                break;
+                case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ):
+                case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ):
+                    maDisplayName = aIter.toString();
+                break;
+                default:
+                    break;
+            }
         }
     }
 }
@@ -842,13 +754,7 @@ ScXMLDataPilotGrandTotalContext::~ScXMLDataPilotGrandTotalContext()
 {
 }
 
-SvXMLImportContext* ScXMLDataPilotGrandTotalContext::CreateChildContext(
-    sal_uInt16 nPrefix, const OUString& rLocalName, const Reference<XAttributeList>& /*xAttrList*/ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
-}
-
-void ScXMLDataPilotGrandTotalContext::EndElement()
+    void SAL_CALL ScXMLDataPilotGrandTotalContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     XMLTokenEnum eOrient = XML_NONE;
     switch (meOrientation)
@@ -869,36 +775,33 @@ void ScXMLDataPilotGrandTotalContext::EndElement()
 }
 
 ScXMLSourceCellRangeContext::ScXMLSourceCellRangeContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotTableContext* pTempDataPilotTable) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotTable(pTempDataPilotTable)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotTableSourceCellRangeAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_SOURCE_CELL_RANGE_ATTR_CELL_RANGE_ADDRESS :
+            switch (aIter.getToken())
             {
-                ScRange aSourceRangeAddress;
-                sal_Int32 nOffset(0);
-                if (ScRangeStringConverter::GetRangeFromString( aSourceRangeAddress, sValue, GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ))
-                    pDataPilotTable->SetSourceCellRangeAddress(aSourceRangeAddress);
+                case XML_ELEMENT( TABLE, XML_CELL_RANGE_ADDRESS ):
+                {
+                    ScRange aSourceRangeAddress;
+                    sal_Int32 nOffset(0);
+                    if (ScRangeStringConverter::GetRangeFromString( aSourceRangeAddress, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ))
+                        pDataPilotTable->SetSourceCellRangeAddress(aSourceRangeAddress);
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_NAME ):
+                    pDataPilotTable->SetSourceRangeName(aIter.toString());
+                break;
             }
-            break;
-            case XML_TOK_SOURCE_CELL_RANGE_ATTR_NAME:
-                pDataPilotTable->SetSourceRangeName(sValue);
-            break;
         }
     }
 }
@@ -907,37 +810,29 @@ ScXMLSourceCellRangeContext::~ScXMLSourceCellRangeContext()
 {
 }
 
-SvXMLImportContext *ScXMLSourceCellRangeContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<
-                                          css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLSourceCellRangeContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotTableSourceCellRangeElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_SOURCE_CELL_RANGE_ELEM_FILTER :
-            pContext = new ScXMLDPFilterContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotTable);
+        case XML_ELEMENT( TABLE, XML_FILTER ):
+            pContext = new ScXMLDPFilterContext(GetScImport(), nElement, xAttrList, pDataPilotTable);
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
-void ScXMLSourceCellRangeContext::EndElement()
-{
-}
-
 ScXMLDataPilotFieldContext::ScXMLDataPilotFieldContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotTableContext* pTempDataPilotTable) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotTable(pTempDataPilotTable),
     xDim(),
     fStart(0.0),
@@ -958,61 +853,43 @@ ScXMLDataPilotFieldContext::ScXMLDataPilotFieldContext( ScXMLImport& rImport,
     bool bDataLayout = false;
     bool bIgnoreSelectedPage = false;
     OUString aDisplayName;
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotFieldAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_SOURCE_FIELD_NAME :
-            {
-                sName = sValue;
-                bHasName = true;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME:
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME_EXT:
-            {
-                aDisplayName = sValue;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_IS_DATA_LAYOUT_FIELD :
-            {
-                bDataLayout = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_FUNCTION :
-            {
-                nFunction = ScXMLConverter::GetFunctionFromString2( sValue );
-            }
-            break;
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_ORIENTATION :
-            {
-                nOrientation = ScXMLConverter::GetOrientationFromString( sValue );
-            }
-            break;
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_SELECTED_PAGE :
-            {
-                sSelectedPage = sValue;
-                bSelectedPage = true;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_IGNORE_SELECTED_PAGE:
+            switch (aIter.getToken())
             {
-                bIgnoreSelectedPage = true;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_FIELD_ATTR_USED_HIERARCHY :
-            {
-                nUsedHierarchy = sValue.toInt32();
+                case XML_ELEMENT( TABLE, XML_SOURCE_FIELD_NAME ):
+                    sName = aIter.toString();
+                    bHasName = true;
+                break;
+                case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ):
+                case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ):
+                    aDisplayName = aIter.toString();
+                break;
+                case XML_ELEMENT( TABLE, XML_IS_DATA_LAYOUT_FIELD ):
+                    bDataLayout = IsXMLToken(aIter, XML_TRUE);
+                break;
+                case XML_ELEMENT( TABLE, XML_FUNCTION ):
+                    nFunction = ScXMLConverter::GetFunctionFromString2( aIter.toString() );
+                break;
+                case XML_ELEMENT( TABLE, XML_ORIENTATION ):
+                    nOrientation = ScXMLConverter::GetOrientationFromString( aIter.toString() );
+                break;
+                case XML_ELEMENT( TABLE, XML_SELECTED_PAGE ):
+                    sSelectedPage = aIter.toString();
+                    bSelectedPage = true;
+                break;
+                case XML_ELEMENT( LO_EXT, XML_IGNORE_SELECTED_PAGE ):
+                    bIgnoreSelectedPage = true;
+                break;
+                case XML_ELEMENT( TABLE, XML_USED_HIERARCHY ):
+                    nUsedHierarchy = aIter.toInt32();
+                break;
             }
-            break;
         }
     }
 
@@ -1032,28 +909,26 @@ ScXMLDataPilotFieldContext::~ScXMLDataPilotFieldContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotFieldContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotFieldContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotFieldElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LEVEL :
-            pContext = new ScXMLDataPilotLevelContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_LEVEL ):
+            pContext = new ScXMLDataPilotLevelContext(GetScImport(), nElement, xAttrList, this);
         break;
-        case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_REFERENCE :
-            pContext = new ScXMLDataPilotFieldReferenceContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_FIELD_REFERENCE ):
+            pContext = new ScXMLDataPilotFieldReferenceContext(GetScImport(), nElement, xAttrList, this);
         break;
-        case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_GROUPS :
-            pContext = new ScXMLDataPilotGroupsContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_GROUPS ):
+            pContext = new ScXMLDataPilotGroupsContext(GetScImport(), nElement, xAttrList, this);
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
@@ -1085,7 +960,7 @@ void ScXMLDataPilotFieldContext::AddGroup(const ::std::vector<OUString>& rMember
     aGroups.push_back(aGroup);
 }
 
-void ScXMLDataPilotFieldContext::EndElement()
+void SAL_CALL ScXMLDataPilotFieldContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     if (xDim)
     {
@@ -1143,62 +1018,64 @@ void ScXMLDataPilotFieldContext::EndElement()
     }
 }
 
-ScXMLDataPilotFieldReferenceContext::ScXMLDataPilotFieldReferenceContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const uno::Reference<xml::sax::XAttributeList>& xAttrList,
+ScXMLDataPilotFieldReferenceContext::ScXMLDataPilotFieldReferenceContext( ScXMLImport& rImport, sal_Int32 /*+*/,
+                        const uno::Reference<xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotFieldContext* pDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName )
+    ScXMLImportContext( rImport )
 {
     sheet::DataPilotFieldReference aReference;
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    if ( xAttrList.is() )
     {
-        OUString sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        OUString sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        if ( nPrefix == XML_NAMESPACE_TABLE )
+        for (auto &aIter : *pAttribList)
         {
-            if (IsXMLToken(aLocalName, XML_TYPE))
+            switch (aIter.getToken())
             {
-                if (IsXMLToken(sValue, XML_NONE))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::NONE;
-                else if (IsXMLToken(sValue, XML_MEMBER_DIFFERENCE))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_DIFFERENCE;
-                else if (IsXMLToken(sValue, XML_MEMBER_PERCENTAGE))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_PERCENTAGE;
-                else if (IsXMLToken(sValue, XML_MEMBER_PERCENTAGE_DIFFERENCE))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_PERCENTAGE_DIFFERENCE;
-                else if (IsXMLToken(sValue, XML_RUNNING_TOTAL))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::RUNNING_TOTAL;
-                else if (IsXMLToken(sValue, XML_ROW_PERCENTAGE))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ROW_PERCENTAGE;
-                else if (IsXMLToken(sValue, XML_COLUMN_PERCENTAGE))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::COLUMN_PERCENTAGE;
-                else if (IsXMLToken(sValue, XML_TOTAL_PERCENTAGE))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::TOTAL_PERCENTAGE;
-                else if (IsXMLToken(sValue, XML_INDEX))
-                    aReference.ReferenceType = sheet::DataPilotFieldReferenceType::INDEX;
-            }
-            else if (IsXMLToken(aLocalName, XML_FIELD_NAME))
-            {
-                aReference.ReferenceField = sValue;
-            }
-            else if (IsXMLToken(aLocalName, XML_MEMBER_TYPE))
-            {
-                if (IsXMLToken(sValue, XML_NAMED))
-                    aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::NAMED;
-                else if (IsXMLToken(sValue, XML_PREVIOUS))
-                    aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::PREVIOUS;
-                else if (IsXMLToken(sValue, XML_NEXT))
-                    aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::NEXT;
-            }
-            else if (IsXMLToken(aLocalName, XML_MEMBER_NAME))
-            {
-                aReference.ReferenceItemName = sValue;
+                case XML_ELEMENT( TABLE, XML_TYPE ):
+                {
+                    if (IsXMLToken(aIter, XML_NONE))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::NONE;
+                    else if (IsXMLToken(aIter, XML_MEMBER_DIFFERENCE))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_DIFFERENCE;
+                    else if (IsXMLToken(aIter, XML_MEMBER_PERCENTAGE))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_PERCENTAGE;
+                    else if (IsXMLToken(aIter, XML_MEMBER_PERCENTAGE_DIFFERENCE))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ITEM_PERCENTAGE_DIFFERENCE;
+                    else if (IsXMLToken(aIter, XML_RUNNING_TOTAL))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::RUNNING_TOTAL;
+                    else if (IsXMLToken(aIter, XML_ROW_PERCENTAGE))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::ROW_PERCENTAGE;
+                    else if (IsXMLToken(aIter, XML_COLUMN_PERCENTAGE))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::COLUMN_PERCENTAGE;
+                    else if (IsXMLToken(aIter, XML_TOTAL_PERCENTAGE))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::TOTAL_PERCENTAGE;
+                    else if (IsXMLToken(aIter, XML_INDEX))
+                        aReference.ReferenceType = sheet::DataPilotFieldReferenceType::INDEX;
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_FIELD_NAME ):
+                {
+                    aReference.ReferenceField = aIter.toString();
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_MEMBER_TYPE ):
+                {
+                    if (IsXMLToken(aIter, XML_NAMED))
+                        aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::NAMED;
+                    else if (IsXMLToken(aIter, XML_PREVIOUS))
+                        aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::PREVIOUS;
+                    else if (IsXMLToken(aIter, XML_NEXT))
+                        aReference.ReferenceItemType = sheet::DataPilotFieldReferenceItemType::NEXT;
+                }
+                break;
+                case XML_ELEMENT( TABLE, XML_MEMBER_NAME ):
+                {
+                    aReference.ReferenceItemName = aIter.toString();
+                }
+                break;
             }
         }
     }
@@ -1210,35 +1087,28 @@ ScXMLDataPilotFieldReferenceContext::~ScXMLDataPilotFieldReferenceContext()
 }
 
 ScXMLDataPilotLevelContext::ScXMLDataPilotLevelContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotFieldContext* pTempDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotField(pTempDataPilotField)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotLevelAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_DATA_PILOT_LEVEL_ATTR_SHOW_EMPTY :
+            switch (aIter.getToken())
             {
-                pDataPilotField->SetShowEmpty(IsXMLToken(sValue, XML_TRUE));
-            }
-            break;
-            case XML_TOK_DATA_PILOT_LEVEL_ATTR_REPEAT_ITEM_LABELS :
-            {
-                pDataPilotField->SetRepeatItemLabels(IsXMLToken(sValue, XML_TRUE));
+                case XML_ELEMENT( TABLE, XML_SHOW_EMPTY ):
+                    pDataPilotField->SetShowEmpty(IsXMLToken(aIter, XML_TRUE));
+                break;
+                case XML_ELEMENT( CALC_EXT, XML_REPEAT_ITEM_LABELS ):
+                    pDataPilotField->SetRepeatItemLabels(IsXMLToken(aIter, XML_TRUE));
+                break;
             }
-            break;
         }
     }
 }
@@ -1247,82 +1117,70 @@ ScXMLDataPilotLevelContext::~ScXMLDataPilotLevelContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotLevelContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotLevelContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotLevelElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_SUBTOTALS :
-            pContext = new ScXMLDataPilotSubTotalsContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_SUBTOTALS ):
+            pContext = new ScXMLDataPilotSubTotalsContext(GetScImport(), nElement, xAttrList, pDataPilotField);
         break;
-        case XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_MEMBERS :
-            pContext = new ScXMLDataPilotMembersContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_MEMBERS ):
+            pContext = new ScXMLDataPilotMembersContext(GetScImport(), nElement, xAttrList, pDataPilotField);
         break;
-        case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_DISPLAY_INFO :
-            pContext = new ScXMLDataPilotDisplayInfoContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_DISPLAY_INFO ):
+            pContext = new ScXMLDataPilotDisplayInfoContext(GetScImport(), nElement, xAttrList, pDataPilotField);
         break;
-        case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_SORT_INFO :
-            pContext = new ScXMLDataPilotSortInfoContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_SORT_INFO ):
+            pContext = new ScXMLDataPilotSortInfoContext(GetScImport(), nElement, xAttrList, pDataPilotField);
         break;
-        case XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LAYOUT_INFO :
-            pContext = new ScXMLDataPilotLayoutInfoContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_LAYOUT_INFO ):
+            pContext = new ScXMLDataPilotLayoutInfoContext(GetScImport(), nElement, xAttrList, pDataPilotField);
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
-void ScXMLDataPilotLevelContext::EndElement()
-{
-}
-
-ScXMLDataPilotDisplayInfoContext::ScXMLDataPilotDisplayInfoContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+ScXMLDataPilotDisplayInfoContext::ScXMLDataPilotDisplayInfoContext( ScXMLImport& rImport, sal_Int32 /*nElement*/,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotFieldContext* pDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName )
+    ScXMLImportContext( rImport )
 {
     sheet::DataPilotFieldAutoShowInfo aInfo;
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    if ( xAttrList.is() )
     {
-        OUString sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        OUString sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        if ( nPrefix == XML_NAMESPACE_TABLE )
+        for (auto &aIter : *pAttribList)
         {
-            if (IsXMLToken(aLocalName, XML_ENABLED))
-            {
-                if (IsXMLToken(sValue, XML_TRUE))
-                    aInfo.IsEnabled = true;
-                else
-                    aInfo.IsEnabled = false;
-            }
-            else if (IsXMLToken(aLocalName, XML_DISPLAY_MEMBER_MODE))
-            {
-                if (IsXMLToken(sValue, XML_FROM_TOP))
-                    aInfo.ShowItemsMode = sheet::DataPilotFieldShowItemsMode::FROM_TOP;
-                else if (IsXMLToken(sValue, XML_FROM_BOTTOM))
-                    aInfo.ShowItemsMode = sheet::DataPilotFieldShowItemsMode::FROM_BOTTOM;
-            }
-            else if (IsXMLToken(aLocalName, XML_MEMBER_COUNT))
+            switch (aIter.getToken())
             {
-                aInfo.ItemCount = sValue.toInt32();
-            }
-            else if (IsXMLToken(aLocalName, XML_DATA_FIELD))
-            {
-                aInfo.DataField = sValue;
+                case XML_ELEMENT( TABLE, XML_ENABLED ):
+                    if (IsXMLToken(aIter, XML_TRUE))
+                        aInfo.IsEnabled = true;
+                    else
+                        aInfo.IsEnabled = false;
+                break;
+                case XML_ELEMENT( TABLE, XML_DISPLAY_MEMBER_MODE ):
+                    if (IsXMLToken(aIter, XML_FROM_TOP))
+                        aInfo.ShowItemsMode = sheet::DataPilotFieldShowItemsMode::FROM_TOP;
+                    else if (IsXMLToken(aIter, XML_FROM_BOTTOM))
+                        aInfo.ShowItemsMode = sheet::DataPilotFieldShowItemsMode::FROM_BOTTOM;
+                break;
+                case XML_ELEMENT( TABLE, XML_MEMBER_COUNT ):
+                    aInfo.ItemCount = aIter.toInt32();
+                break;
+                case XML_ELEMENT( TABLE, XML_DATA_FIELD ):
+                    aInfo.DataField = aIter.toString();
+                break;
             }
         }
     }
@@ -1333,45 +1191,42 @@ ScXMLDataPilotDisplayInfoContext::~ScXMLDataPilotDisplayInfoContext()
 {
 }
 
-ScXMLDataPilotSortInfoContext::ScXMLDataPilotSortInfoContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+ScXMLDataPilotSortInfoContext::ScXMLDataPilotSortInfoContext( ScXMLImport& rImport, sal_Int32 /*nElement*/,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotFieldContext* pDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName )
+    ScXMLImportContext( rImport )
 {
     sheet::DataPilotFieldSortInfo aInfo;
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    if ( xAttrList.is() )
     {
-        OUString sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        OUString sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        if ( nPrefix == XML_NAMESPACE_TABLE )
+        for (auto &aIter : *pAttribList)
         {
-            if (IsXMLToken(aLocalName, XML_ORDER))
+            switch (aIter.getToken())
             {
-                if (IsXMLToken(sValue, XML_ASCENDING))
-                    aInfo.IsAscending = true;
-                else if (IsXMLToken(sValue, XML_DESCENDING))
-                    aInfo.IsAscending = false;
-            }
-            else if (IsXMLToken(aLocalName, XML_SORT_MODE))
-            {
-                if (IsXMLToken(sValue, XML_NONE))
-                    aInfo.Mode = sheet::DataPilotFieldSortMode::NONE;
-                else if (IsXMLToken(sValue, XML_MANUAL))
-                    aInfo.Mode = sheet::DataPilotFieldSortMode::MANUAL;
-                else if (IsXMLToken(sValue, XML_NAME))
-                    aInfo.Mode = sheet::DataPilotFieldSortMode::NAME;
-                else if (IsXMLToken(sValue, XML_DATA))
-                    aInfo.Mode = sheet::DataPilotFieldSortMode::DATA;
+                case XML_ELEMENT( TABLE, XML_ORDER ):
+                    if (IsXMLToken(aIter, XML_ASCENDING))
+                        aInfo.IsAscending = true;
+                    else if (IsXMLToken(aIter, XML_DESCENDING))
+                        aInfo.IsAscending = false;
+                break;
+                case XML_ELEMENT( TABLE, XML_SORT_MODE ):
+                    if (IsXMLToken(aIter, XML_NONE))
+                        aInfo.Mode = sheet::DataPilotFieldSortMode::NONE;
+                    else if (IsXMLToken(aIter, XML_MANUAL))
+                        aInfo.Mode = sheet::DataPilotFieldSortMode::MANUAL;
+                    else if (IsXMLToken(aIter, XML_NAME))
+                        aInfo.Mode = sheet::DataPilotFieldSortMode::NAME;
+                    else if (IsXMLToken(aIter, XML_DATA))
+                        aInfo.Mode = sheet::DataPilotFieldSortMode::DATA;
+                break;
+                case XML_ELEMENT( TABLE, XML_DATA_FIELD ):
+                    aInfo.Field = aIter.toString();
+                break;
             }
-            else if (IsXMLToken(aLocalName, XML_DATA_FIELD))
-                aInfo.Field = sValue;
         }
     }
     pDataPilotField->SetSortInfo(aInfo);
@@ -1381,40 +1236,36 @@ ScXMLDataPilotSortInfoContext::~ScXMLDataPilotSortInfoContext()
 {
 }
 
-ScXMLDataPilotLayoutInfoContext::ScXMLDataPilotLayoutInfoContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+ScXMLDataPilotLayoutInfoContext::ScXMLDataPilotLayoutInfoContext( ScXMLImport& rImport, sal_Int32 /*nElement*/,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotFieldContext* pDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName )
+    ScXMLImportContext( rImport )
 {
     sheet::DataPilotFieldLayoutInfo aInfo;
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    if ( xAttrList.is() )
     {
-        OUString sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        OUString sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        if ( nPrefix == XML_NAMESPACE_TABLE )
+        for (auto &aIter : *pAttribList)
         {
-            if (IsXMLToken(aLocalName, XML_ADD_EMPTY_LINES))
-            {
-                if (IsXMLToken(sValue, XML_TRUE))
-                    aInfo.AddEmptyLines = true;
-                else
-                    aInfo.AddEmptyLines = false;
-            }
-            else if (IsXMLToken(aLocalName, XML_LAYOUT_MODE))
+            switch (aIter.getToken())
             {
-                if (IsXMLToken(sValue, XML_TABULAR_LAYOUT))
-                    aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT;
-                else if (IsXMLToken(sValue, XML_OUTLINE_SUBTOTALS_TOP))
-                    aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP;
-                else if (IsXMLToken(sValue, XML_OUTLINE_SUBTOTALS_BOTTOM))
-                    aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_BOTTOM;
+                case XML_ELEMENT( TABLE, XML_ADD_EMPTY_LINES ):
+                    if (IsXMLToken(aIter, XML_TRUE))
+                        aInfo.AddEmptyLines = true;
+                    else
+                        aInfo.AddEmptyLines = false;
+                break;
+                case XML_ELEMENT( TABLE, XML_LAYOUT_MODE ):
+                    if (IsXMLToken(aIter, XML_TABULAR_LAYOUT))
+                        aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT;
+                    else if (IsXMLToken(aIter, XML_OUTLINE_SUBTOTALS_TOP))
+                        aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP;
+                    else if (IsXMLToken(aIter, XML_OUTLINE_SUBTOTALS_BOTTOM))
+                        aInfo.LayoutMode = sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_BOTTOM;
+                break;
             }
         }
     }
@@ -1425,11 +1276,10 @@ ScXMLDataPilotLayoutInfoContext::~ScXMLDataPilotLayoutInfoContext()
 }
 
 ScXMLDataPilotSubTotalsContext::ScXMLDataPilotSubTotalsContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& /* xAttrList */,
                                       ScXMLDataPilotFieldContext* pTempDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotField(pTempDataPilotField)
 {
 
@@ -1440,27 +1290,25 @@ ScXMLDataPilotSubTotalsContext::~ScXMLDataPilotSubTotalsContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotSubTotalsContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotSubTotalsContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotSubTotalsElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_DATA_PILOT_SUBTOTALS_ELEM_DATA_PILOT_SUBTOTAL :
-            pContext = new ScXMLDataPilotSubTotalContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_SUBTOTAL ):
+            pContext = new ScXMLDataPilotSubTotalContext(GetScImport(), nElement, xAttrList, this);
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
-void ScXMLDataPilotSubTotalsContext::EndElement()
+void SAL_CALL ScXMLDataPilotSubTotalsContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     pDataPilotField->SetSubTotals(maFunctions);
     if (!maDisplayName.isEmpty())
@@ -1478,34 +1326,29 @@ void ScXMLDataPilotSubTotalsContext::SetDisplayName(const OUString& rName)
 }
 
 ScXMLDataPilotSubTotalContext::ScXMLDataPilotSubTotalContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotSubTotalsContext* pTempDataPilotSubTotals) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotSubTotals(pTempDataPilotSubTotals)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotSubTotalAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_FUNCTION :
+            switch (aIter.getToken())
             {
-                pDataPilotSubTotals->AddFunction( ScXMLConverter::GetFunctionFromString2( sValue ) );
+                case XML_ELEMENT( TABLE, XML_FUNCTION ):
+                    pDataPilotSubTotals->AddFunction( ScXMLConverter::GetFunctionFromString2( aIter.toString() ) );
+                break;
+                case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ):
+                case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ):
+                    pDataPilotSubTotals->SetDisplayName(aIter.toString());
+                break;
             }
-            break;
-            case XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME:
-            case XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME_EXT:
-                pDataPilotSubTotals->SetDisplayName(sValue);
-            break;
         }
     }
 }
@@ -1514,23 +1357,11 @@ ScXMLDataPilotSubTotalContext::~ScXMLDataPilotSubTotalContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotSubTotalContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
-}
-
-void ScXMLDataPilotSubTotalContext::EndElement()
-{
-}
-
 ScXMLDataPilotMembersContext::ScXMLDataPilotMembersContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& /* xAttrList */,
                                       ScXMLDataPilotFieldContext* pTempDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotField(pTempDataPilotField)
 {
     // has no attributes
@@ -1540,76 +1371,58 @@ ScXMLDataPilotMembersContext::~ScXMLDataPilotMembersContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotMembersContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<
-                                          css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotMembersContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetDataPilotMembersElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_DATA_PILOT_MEMBERS_ELEM_DATA_PILOT_MEMBER :
-            pContext = new ScXMLDataPilotMemberContext(GetScImport(), nPrefix, rLName, xAttrList, pDataPilotField);
+        case XML_ELEMENT( TABLE, XML_DATA_PILOT_MEMBER ):
+            pContext = new ScXMLDataPilotMemberContext(GetScImport(), nElement, xAttrList, pDataPilotField);
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
-void ScXMLDataPilotMembersContext::EndElement()
-{
-}
-
 ScXMLDataPilotMemberContext::ScXMLDataPilotMemberContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotFieldContext* pTempDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotField(pTempDataPilotField),
     bDisplay( true ),
     bDisplayDetails( true ),
     bHasName( false )
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotMemberAttrTokenMap();
-    for( sal_Int16 i=0; i < nAttrCount; ++i )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName(xAttrList->getNameByIndex( i ));
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        const OUString& sValue(xAttrList->getValueByIndex( i ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_DATA_PILOT_MEMBER_ATTR_NAME :
-            {
-                sName = sValue;
-                bHasName = true;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME:
-            case XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME_EXT:
-            {
-                maDisplayName = sValue;
-            }
-            break;
-            case XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY :
+            switch (aIter.getToken())
             {
-                bDisplay = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_DATA_PILOT_MEMBER_ATTR_SHOW_DETAILS :
-            {
-                bDisplayDetails = IsXMLToken(sValue, XML_TRUE);
+                case XML_ELEMENT( TABLE, XML_NAME ):
+                    sName = aIter.toString();
+                    bHasName = true;
+                break;
+                case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ):
+                case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ):
+                    maDisplayName = aIter.toString();
+                break;
+                case XML_ELEMENT( TABLE, XML_DISPLAY ):
+                    bDisplay = IsXMLToken(aIter, XML_TRUE);
+                break;
+                case XML_ELEMENT( TABLE, XML_SHOW_DETAILS ):
+                    bDisplayDetails = IsXMLToken(aIter, XML_TRUE);
+                break;
             }
-            break;
         }
     }
 }
@@ -1618,14 +1431,7 @@ ScXMLDataPilotMemberContext::~ScXMLDataPilotMemberContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotMemberContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
-}
-
-void ScXMLDataPilotMemberContext::EndElement()
+void SAL_CALL ScXMLDataPilotMemberContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     if (bHasName)   // #i53407# don't check sName, empty name is allowed
     {
@@ -1639,11 +1445,10 @@ void ScXMLDataPilotMemberContext::EndElement()
 }
 
 ScXMLDataPilotGroupsContext::ScXMLDataPilotGroupsContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotFieldContext* pTempDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotField(pTempDataPilotField)
 {
     OUString                sGroupSource;
@@ -1655,80 +1460,91 @@ ScXMLDataPilotGroupsContext::ScXMLDataPilotGroupsContext( ScXMLImport& rImport,
     bool                    bAutoStart(true);
     bool                    bAutoEnd(true);
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    if ( xAttrList.is() )
     {
-        OUString sAttrName = xAttrList->getNameByIndex( i );
-        OUString aLocalName;
-        GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        OUString sValue = xAttrList->getValueByIndex( i );
-
-        if (IsXMLToken(aLocalName, XML_SOURCE_FIELD_NAME))
-                sGroupSource = sValue;
-        else if (IsXMLToken(aLocalName, XML_DATE_START))
-        {
-            bDateValue = true;
-            if (IsXMLToken(sValue, XML_AUTO))
-                bAutoStart = true;
-            else
-            {
-                GetScImport().GetMM100UnitConverter().convertDateTime(fStart, sValue);
-                bAutoStart = false;
-            }
-        }
-        else if (IsXMLToken(aLocalName, XML_DATE_END))
-        {
-            bDateValue = true;
-            if (IsXMLToken(sValue, XML_AUTO))
-                bAutoEnd = true;
-            else
-            {
-                GetScImport().GetMM100UnitConverter().convertDateTime(fEnd, sValue);
-                bAutoEnd = false;
-            }
-        }
-        else if (IsXMLToken(aLocalName, XML_START))
-        {
-            if (IsXMLToken(sValue, XML_AUTO))
-                bAutoStart = true;
-            else
-            {
-                ::sax::Converter::convertDouble(fStart, sValue);
-                bAutoStart = false;
-            }
-        }
-        else if (IsXMLToken(aLocalName, XML_END))
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
+
+        for (auto &aIter : *pAttribList)
         {
-            if (IsXMLToken(sValue, XML_AUTO))
-                bAutoEnd = true;
-            else
+            switch (aIter.getToken() & TOKEN_MASK)
             {
-                ::sax::Converter::convertDouble(fEnd, sValue);
-                bAutoEnd = false;
+                case XML_SOURCE_FIELD_NAME :
+                {
+                    sGroupSource = aIter.toString();
+                }
+                break;
+                case XML_DATE_START :
+                {
+                    bDateValue = true;
+                    if (IsXMLToken(aIter, XML_AUTO))
+                        bAutoStart = true;
+                    else
+                    {
+                        GetScImport().GetMM100UnitConverter().convertDateTime(fStart, aIter.toString());
+                        bAutoStart = false;
+                    }
+                }
+                break;
+                case XML_DATE_END :
+                {
+                    bDateValue = true;
+                    if (IsXMLToken(aIter, XML_AUTO))
+                        bAutoEnd = true;
+                    else
+                    {
+                        GetScImport().GetMM100UnitConverter().convertDateTime(fEnd, aIter.toString());
+                        bAutoEnd = false;
+                    }
+                }
+                break;
+                case XML_START :
+                {
+                    if (IsXMLToken(aIter, XML_AUTO))
+                        bAutoStart = true;
+                    else
+                    {
+                        ::sax::Converter::convertDouble(fStart, aIter.toString());
+                        bAutoStart = false;
+                    }
+                }
+                break;
+                case XML_END :
+                {
+                    if (IsXMLToken(aIter, XML_AUTO))
+                        bAutoEnd = true;
+                    else
+                    {
+                        ::sax::Converter::convertDouble(fEnd, aIter.toString());
+                        bAutoEnd = false;
+                    }
+                }
+                break;
+                case XML_STEP :
+                {
+                    ::sax::Converter::convertDouble(fStep, aIter.toString());
+                }
+                break;
+                case XML_GROUPED_BY :
+                {
+                    if (IsXMLToken(aIter, XML_SECONDS))
+                        nGroupPart = css::sheet::DataPilotFieldGroupBy::SECONDS;
+                    else if (IsXMLToken(aIter, XML_MINUTES))
+                        nGroupPart = css::sheet::DataPilotFieldGroupBy::MINUTES;
+                    else if (IsXMLToken(aIter, XML_HOURS))
+                        nGroupPart = css::sheet::DataPilotFieldGroupBy::HOURS;
+                    else if (IsXMLToken(aIter, XML_DAYS))
+                        nGroupPart = css::sheet::DataPilotFieldGroupBy::DAYS;
+                    else if (IsXMLToken(aIter, XML_MONTHS))
+                        nGroupPart = css::sheet::DataPilotFieldGroupBy::MONTHS;
+                    else if (IsXMLToken(aIter, XML_QUARTERS))
+                        nGroupPart = css::sheet::DataPilotFieldGroupBy::QUARTERS;
+                    else if (IsXMLToken(aIter, XML_YEARS))
+                        nGroupPart = css::sheet::DataPilotFieldGroupBy::YEARS;
+                }
+                break;
             }
         }
-        else if (IsXMLToken(aLocalName, XML_STEP))
-        {
-                ::sax::Converter::convertDouble(fStep, sValue);
-        }
-        else if (IsXMLToken(aLocalName, XML_GROUPED_BY))
-        {
-            if (IsXMLToken(sValue, XML_SECONDS))
-                nGroupPart = css::sheet::DataPilotFieldGroupBy::SECONDS;
-            else if (IsXMLToken(sValue, XML_MINUTES))
-                nGroupPart = css::sheet::DataPilotFieldGroupBy::MINUTES;
-            else if (IsXMLToken(sValue, XML_HOURS))
-                nGroupPart = css::sheet::DataPilotFieldGroupBy::HOURS;
-            else if (IsXMLToken(sValue, XML_DAYS))
-                nGroupPart = css::sheet::DataPilotFieldGroupBy::DAYS;
-            else if (IsXMLToken(sValue, XML_MONTHS))
-                nGroupPart = css::sheet::DataPilotFieldGroupBy::MONTHS;
-            else if (IsXMLToken(sValue, XML_QUARTERS))
-                nGroupPart = css::sheet::DataPilotFieldGroupBy::QUARTERS;
-            else if (IsXMLToken(sValue, XML_YEARS))
-                nGroupPart = css::sheet::DataPilotFieldGroupBy::YEARS;
-        }
     }
     pDataPilotField->SetGrouping(sGroupSource, fStart, fEnd, fStep, nGroupPart, bDateValue, bAutoStart, bAutoEnd);
 }
@@ -1737,50 +1553,37 @@ ScXMLDataPilotGroupsContext::~ScXMLDataPilotGroupsContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotGroupsContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotGroupsContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    if (nPrefix == XML_NAMESPACE_TABLE)
+    if (nElement == XML_ELEMENT( TABLE, XML_DATA_PILOT_GROUP ))
     {
-        if (IsXMLToken(rLName, XML_DATA_PILOT_GROUP))
-            pContext = new ScXMLDataPilotGroupContext(GetScImport(), nPrefix, rLName,  xAttrList, pDataPilotField);
+        pContext = new ScXMLDataPilotGroupContext(GetScImport(), nElement,  xAttrList, pDataPilotField);
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
-void ScXMLDataPilotGroupsContext::EndElement()
-{
-}
-
 ScXMLDataPilotGroupContext::ScXMLDataPilotGroupContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotFieldContext* pTempDataPilotField) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotField(pTempDataPilotField)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    if ( xAttrList.is() )
     {
-        OUString sAttrName = xAttrList->getNameByIndex( i );
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        OUString sValue = xAttrList->getValueByIndex( i );
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        if (nPrefix == XML_NAMESPACE_TABLE)
-        {
-            if (IsXMLToken(aLocalName, XML_NAME))
-                sName = sValue;
-        }
+        auto &aIter( pAttribList->find( XML_ELEMENT( TABLE, XML_NAME ) ) );
+        if (aIter != pAttribList->end())
+            sName = aIter.toString();
     }
 }
 
@@ -1788,51 +1591,43 @@ ScXMLDataPilotGroupContext::~ScXMLDataPilotGroupContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotGroupContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotGroupContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    if (nPrefix == XML_NAMESPACE_TABLE)
+    if (nElement == XML_ELEMENT( TABLE, XML_DATA_PILOT_MEMBER ) ||
+        nElement == XML_ELEMENT( TABLE, XML_DATA_PILOT_GROUP_MEMBER ))
     {
-        if (IsXMLToken(rLName, XML_DATA_PILOT_MEMBER) || IsXMLToken(rLName, XML_DATA_PILOT_GROUP_MEMBER))
-            pContext = new ScXMLDataPilotGroupMemberContext(GetScImport(), nPrefix, rLName, xAttrList, this);
+        pContext = new ScXMLDataPilotGroupMemberContext(GetScImport(), nElement, xAttrList, this);
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
-void ScXMLDataPilotGroupContext::EndElement()
+void SAL_CALL ScXMLDataPilotGroupContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     pDataPilotField->AddGroup(aMembers, sName);
 }
 
 ScXMLDataPilotGroupMemberContext::ScXMLDataPilotGroupMemberContext( ScXMLImport& rImport,
-                                      sal_uInt16 nPrfx,
-                                      const OUString& rLName,
-                                      const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+                                      sal_Int32 /*nElement*/,
+                                      const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                                       ScXMLDataPilotGroupContext* pTempDataPilotGroup) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     pDataPilotGroup(pTempDataPilotGroup)
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    if ( xAttrList.is() )
     {
-        OUString sAttrName = xAttrList->getNameByIndex( i );
-        OUString aLocalName;
-        sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName(
-                                            sAttrName, &aLocalName );
-        OUString sValue = xAttrList->getValueByIndex( i );
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList );
 
-        if (nPrefix == XML_NAMESPACE_TABLE)
-        {
-            if (IsXMLToken(aLocalName, XML_NAME))
-                sName = sValue;
-        }
+        auto &aIter( pAttribList->find( XML_ELEMENT( TABLE, XML_NAME ) ) );
+        if (aIter != pAttribList->end())
+            sName = aIter.toString();
     }
 }
 
@@ -1840,14 +1635,7 @@ ScXMLDataPilotGroupMemberContext::~ScXMLDataPilotGroupMemberContext()
 {
 }
 
-SvXMLImportContext *ScXMLDataPilotGroupMemberContext::CreateChildContext( sal_uInt16 nPrefix,
-                                            const OUString& rLName,
-                                            const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
-{
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
-}
-
-void ScXMLDataPilotGroupMemberContext::EndElement()
+void SAL_CALL ScXMLDataPilotGroupMemberContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     if (!sName.isEmpty())
         pDataPilotGroup->AddMember(sName);
diff --git a/sc/source/filter/xml/xmldpimp.hxx b/sc/source/filter/xml/xmldpimp.hxx
index 5b48837fe8b5..5ab66f585a44 100644
--- a/sc/source/filter/xml/xmldpimp.hxx
+++ b/sc/source/filter/xml/xmldpimp.hxx
@@ -57,9 +57,8 @@ public:
 
     virtual ~ScXMLDataPilotTablesContext() override;
 
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
 };
 
 class ScXMLDataPilotTableContext : public ScXMLImportContext
@@ -114,17 +113,15 @@ class ScXMLDataPilotTableContext : public ScXMLImportContext
 
 public:
 
-    ScXMLDataPilotTableContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList);
+    ScXMLDataPilotTableContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList);
 
     virtual ~ScXMLDataPilotTableContext() override;
 
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
 
-    virtual void EndElement() override;
+    virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override;
 
     void SetGrandTotal(::xmloff::token::XMLTokenEnum eOrientation, bool bVisible, const OUString& rDisplayName);
     void SetDatabaseName(const OUString& sValue) { sDatabaseName = sValue; }
@@ -153,18 +150,11 @@ class ScXMLDPSourceSQLContext : public ScXMLImportContext
 
 public:
 
-    ScXMLDPSourceSQLContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLDPSourceSQLContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotTableContext* pDataPilotTable);
 
     virtual ~ScXMLDPSourceSQLContext() override;
-
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
-
-    virtual void EndElement() override;
 };
 
 class ScXMLDPSourceTableContext : public ScXMLImportContext
@@ -173,18 +163,11 @@ class ScXMLDPSourceTableContext : public ScXMLImportContext
 
 public:
 
-    ScXMLDPSourceTableContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLDPSourceTableContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotTableContext* pDataPilotTable);
 
     virtual ~ScXMLDPSourceTableContext() override;
-
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
-
-    virtual void EndElement() override;
 };
 
 class ScXMLDPSourceQueryContext : public ScXMLImportContext
@@ -193,18 +176,11 @@ class ScXMLDPSourceQueryContext : public ScXMLImportContext
 
 public:
 
-    ScXMLDPSourceQueryContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLDPSourceQueryContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotTableContext* pDataPilotTable);
 
     virtual ~ScXMLDPSourceQueryContext() override;
-
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
-
-    virtual void EndElement() override;
 };
 
 class ScXMLSourceServiceContext : public ScXMLImportContext
@@ -213,18 +189,11 @@ class ScXMLSourceServiceContext : public ScXMLImportContext
 
 public:
 
-    ScXMLSourceServiceContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLSourceServiceContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotTableContext* pDataPilotTable);
 
     virtual ~ScXMLSourceServiceContext() override;
-
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
-
-    virtual void EndElement() override;
 };
 
 class ScXMLDataPilotGrandTotalContext : public ScXMLImportContext
@@ -238,17 +207,13 @@ class ScXMLDataPilotGrandTotalContext : public ScXMLImportContext
 
 public:
     ScXMLDataPilotGrandTotalContext(
-        ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName,
-        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+        ScXMLImport& rImport, sal_Int32 nElement,
+        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
         ScXMLDataPilotTableContext* pTableContext );
 
     virtual ~ScXMLDataPilotGrandTotalContext() override;
 
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
-
-    virtual void EndElement() override;
+    virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override;
 };
 
 class ScXMLSourceCellRangeContext : public ScXMLImportContext
@@ -257,18 +222,14 @@ class ScXMLSourceCellRangeContext : public ScXMLImportContext
 
 public:
 
-    ScXMLSourceCellRangeContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLSourceCellRangeContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotTableContext* pDataPilotTable);
 
     virtual ~ScXMLSourceCellRangeContext() override;
 
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
-
-    virtual void EndElement() override;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
 };
 
 struct ScXMLDataPilotGroup
@@ -303,18 +264,16 @@ class ScXMLDataPilotFieldContext : public ScXMLImportContext
 
 public:
 
-    ScXMLDataPilotFieldContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLDataPilotFieldContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotTableContext* pDataPilotTable);
 
     virtual ~ScXMLDataPilotFieldContext() override;
 
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,
-                                     const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+        sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
 
-    virtual void EndElement() override;
+    virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override;
 
     void SetShowEmpty(const bool bValue) { if (xDim) xDim->SetShowEmpty(bValue); }
     void SetRepeatItemLabels(const bool bSet) { if (xDim) xDim->SetRepeatItemLabels(bSet); }
@@ -345,9 +304,8 @@ class ScXMLDataPilotFieldReferenceContext : public ScXMLImportContext
 {
 public:
 
-    ScXMLDataPilotFieldReferenceContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLDataPilotFieldReferenceContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotFieldContext* pDataPilotField);
 
     virtual ~ScXMLDataPilotFieldReferenceContext() override;
@@ -359,27 +317,22 @@ class ScXMLDataPilotLevelContext : public ScXMLImportContext
 
 public:
 
-    ScXMLDataPilotLevelContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLDataPilotLevelContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         ScXMLDataPilotFieldContext* pDataPilotField);
 
     virtual ~ScXMLDataPilotLevelContext() override;
 
-    virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
-                                     const OUString& rLocalName,

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list