sc/source/filter/xml/XMLTableShapesContext.cxx |   11 --
 sc/source/filter/xml/XMLTableShapesContext.hxx |    7 -
 sc/source/filter/xml/XMLTableSourceContext.cxx |   65 +++++-------
 sc/source/filter/xml/XMLTableSourceContext.hxx |   12 --
 sc/source/filter/xml/xmlcoli.cxx               |  106 ++++++++-----------
 sc/source/filter/xml/xmlcoli.hxx               |   24 +---
 sc/source/filter/xml/xmlcondformat.cxx         |    7 -
 sc/source/filter/xml/xmlcondformat.hxx         |    5 
 sc/source/filter/xml/xmllabri.cxx              |   67 +++++-------
 sc/source/filter/xml/xmllabri.hxx              |   23 ++--
 sc/source/filter/xml/xmlsceni.cxx              |  109 ++++++++------------
 sc/source/filter/xml/xmlsceni.hxx              |   12 --
 sc/source/filter/xml/xmltabi.cxx               |  135 +++++++++++--------------
 sc/source/filter/xml/xmltabi.hxx               |   12 --
 14 files changed, 259 insertions(+), 336 deletions(-)

New commits:
commit a9588baca8137f51e2ca72e40b1f448b0e1885d1
Author: Mohammed Abdul Azeem <azeemmys...@gmail.com>
Date:   Fri Jul 21 00:42:03 2017 +0530

    Moving legacy contexts to FastContexts:
    
    ScXMLTableShapesContext
    ScXMLTableSourceContext
    ScXMLTableColContext
    ScXMLTableColsContext
    ScXMLConditionalFormatsContext
    ScXMLTableProtectionContext
    
    Change-Id: I36704c7f51cd5d13b3c0ebf9bc07b172c1576f3e
    Reviewed-on: https://gerrit.libreoffice.org/40246
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>
    Tested-by: Jenkins <c...@libreoffice.org>

diff --git a/sc/source/filter/xml/XMLTableShapesContext.cxx 
b/sc/source/filter/xml/XMLTableShapesContext.cxx
index 4aa69c0b65cd..35ca7bace2a9 100644
--- a/sc/source/filter/xml/XMLTableShapesContext.cxx
+++ b/sc/source/filter/xml/XMLTableShapesContext.cxx
@@ -25,10 +25,9 @@
 using namespace com::sun::star;
 
 ScXMLTableShapesContext::ScXMLTableShapesContext( 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 )
 {
     // here are no attributes
 }
@@ -59,8 +58,4 @@ SvXMLImportContext 
*ScXMLTableShapesContext::CreateChildContext( sal_uInt16 nPre
     return pContext;
 }
 
-void ScXMLTableShapesContext::EndElement()
-{
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/xml/XMLTableShapesContext.hxx 
b/sc/source/filter/xml/XMLTableShapesContext.hxx
index db9a3f3b2f20..93d85e3a47d6 100644
--- a/sc/source/filter/xml/XMLTableShapesContext.hxx
+++ b/sc/source/filter/xml/XMLTableShapesContext.hxx
@@ -27,17 +27,14 @@
 class ScXMLTableShapesContext : public ScXMLImportContext
 {
 public:
-    ScXMLTableShapesContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList);
+    ScXMLTableShapesContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList);
 
     virtual ~ScXMLTableShapesContext() override;
 
     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
                                      const OUString& rLocalName,
                                      const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override;
-
-    virtual void EndElement() override;
 };
 
 #endif
diff --git a/sc/source/filter/xml/XMLTableSourceContext.cxx 
b/sc/source/filter/xml/XMLTableSourceContext.cxx
index 8909adb7f0b4..7d0c936a0346 100644
--- a/sc/source/filter/xml/XMLTableSourceContext.cxx
+++ b/sc/source/filter/xml/XMLTableSourceContext.cxx
@@ -32,10 +32,9 @@ using namespace com::sun::star;
 using namespace xmloff::token;
 
 ScXMLTableSourceContext::ScXMLTableSourceContext( 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 ),
     sLink(),
     sTableName(),
     sFilterName(),
@@ -43,37 +42,36 @@ ScXMLTableSourceContext::ScXMLTableSourceContext( 
ScXMLImport& rImport,
     nRefresh(0),
     nMode(sheet::SheetLinkMode_NORMAL)
 {
-    sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
-    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 ));
-        if(nPrefix == XML_NAMESPACE_XLINK)
-        {
-            if (IsXMLToken(aLocalName, XML_HREF))
-                sLink = GetScImport().GetAbsoluteReference(sValue);
-        }
-        else if (nPrefix == XML_NAMESPACE_TABLE)
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( 
xAttrList );
+
+        for (auto &aIter : *pAttribList)
         {
-            if (IsXMLToken(aLocalName, XML_TABLE_NAME))
-                sTableName = sValue;
-            else if (IsXMLToken(aLocalName, XML_FILTER_NAME))
-                sFilterName = sValue;
-            else if (IsXMLToken(aLocalName, XML_FILTER_OPTIONS))
-                sFilterOptions = sValue;
-            else if (IsXMLToken(aLocalName, XML_MODE))
+            switch (aIter.getToken())
             {
-                if (IsXMLToken(sValue, XML_COPY_RESULTS_ONLY))
+            case XML_ELEMENT( XLINK, XML_HREF ):
+                sLink = GetScImport().GetAbsoluteReference(aIter.toString());
+                break;
+            case XML_ELEMENT( TABLE, XML_TABLE_NAME ):
+                sTableName = aIter.toString();
+                break;
+            case XML_ELEMENT( TABLE, XML_FILTER_NAME):
+                sFilterName = aIter.toString();
+                break;
+            case XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ):
+                sFilterOptions = aIter.toString();
+                break;
+            case XML_ELEMENT( TABLE, XML_MODE ):
+                if (IsXMLToken(aIter, XML_COPY_RESULTS_ONLY))
                     nMode = sheet::SheetLinkMode_VALUE;
-            }
-            else if (IsXMLToken(aLocalName, XML_REFRESH_DELAY))
-            {
+                break;
+            case XML_ELEMENT( TABLE, XML_REFRESH_DELAY ):
                 double fTime;
-                if (::sax::Converter::convertDuration( fTime, sValue ))
+                if (::sax::Converter::convertDuration( fTime, aIter.toString() 
))
                     nRefresh = std::max( (sal_Int32)(fTime * 86400.0), 
(sal_Int32)0 );
+                break;
             }
         }
     }
@@ -83,14 +81,13 @@ ScXMLTableSourceContext::~ScXMLTableSourceContext()
 {
 }
 
-SvXMLImportContext *ScXMLTableSourceContext::CreateChildContext( sal_uInt16 
nPrefix,
-                                            const OUString& rLName,
-                                            const 
css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL 
ScXMLTableSourceContext::createFastChildContext(
+    sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList 
>& /*xAttrList*/ )
 {
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
+    return new SvXMLImportContext( GetImport() );
 }
 
-void ScXMLTableSourceContext::EndElement()
+void SAL_CALL ScXMLTableSourceContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     if (!sLink.isEmpty())
     {
diff --git a/sc/source/filter/xml/XMLTableSourceContext.hxx 
b/sc/source/filter/xml/XMLTableSourceContext.hxx
index 31791c0f4a08..32805d92b933 100644
--- a/sc/source/filter/xml/XMLTableSourceContext.hxx
+++ b/sc/source/filter/xml/XMLTableSourceContext.hxx
@@ -35,17 +35,15 @@ class ScXMLTableSourceContext : public ScXMLImportContext
     css::sheet::SheetLinkMode          nMode;
 
 public:
-    ScXMLTableSourceContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList);
+    ScXMLTableSourceContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList);
 
     virtual ~ScXMLTableSourceContext() 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;
 };
 
 #endif
diff --git a/sc/source/filter/xml/xmlcoli.cxx b/sc/source/filter/xml/xmlcoli.cxx
index 2b90f841284d..ac61900a426b 100644
--- a/sc/source/filter/xml/xmlcoli.cxx
+++ b/sc/source/filter/xml/xmlcoli.cxx
@@ -40,47 +40,43 @@ using namespace com::sun::star;
 using namespace xmloff::token;
 
 ScXMLTableColContext::ScXMLTableColContext( 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 ),
     sVisibility(GetXMLToken(XML_VISIBLE))
 {
     nColCount = 1;
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    const SvXMLTokenMap& rAttrTokenMap = 
GetScImport().GetTableColAttrTokenMap();
-
-    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_TABLE_COL_ATTR_REPEATED:
+            switch (aIter.getToken())
+            {
+            case XML_ELEMENT( TABLE, XML_NUMBER_COLUMNS_REPEATED ):
                 {
-                    nColCount = std::max<sal_Int32>(sValue.toInt32(), 1);
+                    nColCount = std::max<sal_Int32>(aIter.toInt32(), 1);
                     nColCount = std::min<sal_Int32>(nColCount, MAXCOLCOUNT);
                 }
                 break;
-            case XML_TOK_TABLE_COL_ATTR_STYLE_NAME:
+            case XML_ELEMENT( TABLE, XML_STYLE_NAME ):
                 {
-                    sStyleName = sValue;
+                    sStyleName = aIter.toString();
                 }
                 break;
-            case XML_TOK_TABLE_COL_ATTR_VISIBILITY:
+            case XML_ELEMENT( TABLE, XML_VISIBILITY ):
                 {
-                    sVisibility = sValue;
+                    sVisibility = aIter.toString();
                 }
                 break;
-            case XML_TOK_TABLE_COL_ATTR_DEFAULT_CELL_STYLE_NAME:
+            case XML_ELEMENT( TABLE, XML_DEFAULT_CELL_STYLE_NAME ):
                 {
-                    sCellStyleName = sValue;
+                    sCellStyleName = aIter.toString();
                 }
                 break;
+            }
         }
     }
 }
@@ -89,14 +85,13 @@ ScXMLTableColContext::~ScXMLTableColContext()
 {
 }
 
-SvXMLImportContext *ScXMLTableColContext::CreateChildContext( sal_uInt16 
nPrefix,
-                                            const OUString& rLName,
-                                            const 
css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */ )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL 
ScXMLTableColContext::createFastChildContext(
+    sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList 
>& /*xAttrList*/ )
 {
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
+    return new SvXMLImportContext( GetImport() );
 }
 
-void ScXMLTableColContext::EndElement()
+void SAL_CALL ScXMLTableColContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     ScXMLImport& rXMLImport = GetScImport();
     SCTAB nSheet = rXMLImport.GetTables().GetCurrentSheet();
@@ -152,11 +147,10 @@ void ScXMLTableColContext::EndElement()
 }
 
 ScXMLTableColsContext::ScXMLTableColsContext( 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,
                                       const bool bTempHeader, const bool 
bTempGroup) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+    ScXMLImportContext( rImport ),
     nHeaderStartCol(0),
     nHeaderEndCol(0),
     nGroupStartCol(0),
@@ -171,20 +165,14 @@ ScXMLTableColsContext::ScXMLTableColsContext( 
ScXMLImport& rImport,
     else if (bGroup)
     {
         nGroupStartCol = rImport.GetTables().GetCurrentColCount();
-        sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-        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 );
 
-            if (nPrefix == XML_NAMESPACE_TABLE && IsXMLToken(aLocalName, 
XML_DISPLAY))
-            {
-                if (IsXMLToken(sValue, XML_FALSE))
-                    bGroupDisplay = false;
-            }
+            auto &aIter( pAttribList->find( XML_ELEMENT( TABLE, XML_DISPLAY ) 
) );
+            if ( aIter != pAttribList->end() && IsXMLToken(aIter, XML_FALSE) )
+                bGroupDisplay = false;
         }
     }
 }
@@ -193,45 +181,39 @@ ScXMLTableColsContext::~ScXMLTableColsContext()
 {
 }
 
-SvXMLImportContext *ScXMLTableColsContext::CreateChildContext( sal_uInt16 
nPrefix,
-                                            const OUString& rLName,
-                                            const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL 
ScXMLTableColsContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& 
xAttrList )
 {
     SvXMLImportContext *pContext = nullptr;
 
-    const SvXMLTokenMap& rTokenMap = GetScImport().GetTableColsElemTokenMap();
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-    case XML_TOK_TABLE_COLS_COL_GROUP:
-        pContext = new ScXMLTableColsContext( GetScImport(), nPrefix,
-                                                   rLName, xAttrList,
+    case XML_ELEMENT( TABLE, XML_TABLE_COLUMN_GROUP ):
+        pContext = new ScXMLTableColsContext( GetScImport(), nElement, 
xAttrList,
                                                    false, true );
         break;
-    case XML_TOK_TABLE_COLS_HEADER_COLS:
-        pContext = new ScXMLTableColsContext( GetScImport(), nPrefix,
-                                                   rLName, xAttrList,
+    case XML_ELEMENT( TABLE, XML_TABLE_HEADER_COLUMNS ):
+        pContext = new ScXMLTableColsContext( GetScImport(), nElement, 
xAttrList,
                                                    true, false );
         break;
-    case XML_TOK_TABLE_COLS_COLS:
-        pContext = new ScXMLTableColsContext( GetScImport(), nPrefix,
-                                                   rLName, xAttrList,
+    case XML_ELEMENT( TABLE, XML_TABLE_COLUMNS ):
+        pContext = new ScXMLTableColsContext( GetScImport(), nElement, 
xAttrList,
                                                    false, false );
         break;
-    case XML_TOK_TABLE_COLS_COL:
-            pContext = new ScXMLTableColContext( GetScImport(), nPrefix,
-                                                      rLName, xAttrList//,
+    case XML_ELEMENT( TABLE, XML_TABLE_COLUMN ):
+        pContext = new ScXMLTableColContext( GetScImport(), nElement, 
xAttrList//,
                                                       //this
                                                       );
         break;
     }
 
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
-void ScXMLTableColsContext::EndElement()
+void SAL_CALL ScXMLTableColsContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     ScXMLImport& rXMLImport = GetScImport();
     if (bHeader)
diff --git a/sc/source/filter/xml/xmlcoli.hxx b/sc/source/filter/xml/xmlcoli.hxx
index 85aaa640eecc..9b7d2a2a9378 100644
--- a/sc/source/filter/xml/xmlcoli.hxx
+++ b/sc/source/filter/xml/xmlcoli.hxx
@@ -33,17 +33,15 @@ class ScXMLTableColContext : public ScXMLImportContext
 
 public:
 
-    ScXMLTableColContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                       const OUString& rLName,
-                       const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList );
+    ScXMLTableColContext( ScXMLImport& rImport, sal_Int32 nElement,
+                       const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList );
 
     virtual ~ScXMLTableColContext() 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;
 };
 
 class ScXMLTableColsContext : public ScXMLImportContext
@@ -58,18 +56,16 @@ class ScXMLTableColsContext : public ScXMLImportContext
 
 public:
 
-    ScXMLTableColsContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                       const OUString& rLName,
-                       const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList,
+    ScXMLTableColsContext( ScXMLImport& rImport, sal_Int32 nElement,
+                       const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList,
                         const bool bHeader, const bool bGroup);
 
     virtual ~ScXMLTableColsContext() 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;
 };
 
 #endif
diff --git a/sc/source/filter/xml/xmlcondformat.cxx 
b/sc/source/filter/xml/xmlcondformat.cxx
index 91b0d6e7e5c1..921fe8d8e233 100644
--- a/sc/source/filter/xml/xmlcondformat.cxx
+++ b/sc/source/filter/xml/xmlcondformat.cxx
@@ -21,9 +21,8 @@
 #include "XMLConverter.hxx"
 #include "stylehelper.hxx"
 
-ScXMLConditionalFormatsContext::ScXMLConditionalFormatsContext( ScXMLImport& 
rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName):
-    ScXMLImportContext( rImport, nPrfx, rLName )
+ScXMLConditionalFormatsContext::ScXMLConditionalFormatsContext( ScXMLImport& 
rImport, sal_Int32 /*nElement*/ ):
+    ScXMLImportContext( rImport )
 {
     GetScImport().SetNewCondFormatData();
     GetScImport().GetDocument()->SetCondFormList(new 
ScConditionalFormatList(), GetScImport().GetTables().GetCurrentSheet());
@@ -46,7 +45,7 @@ SvXMLImportContext* 
ScXMLConditionalFormatsContext::CreateChildContext( sal_uInt
     return pContext;
 }
 
-void ScXMLConditionalFormatsContext::EndElement()
+void SAL_CALL ScXMLConditionalFormatsContext::endFastElement( sal_Int32 
/*nElement*/ )
 {
     ScDocument* pDoc = GetScImport().GetDocument();
 
diff --git a/sc/source/filter/xml/xmlcondformat.hxx 
b/sc/source/filter/xml/xmlcondformat.hxx
index 593d65f45b55..d2639da97364 100644
--- a/sc/source/filter/xml/xmlcondformat.hxx
+++ b/sc/source/filter/xml/xmlcondformat.hxx
@@ -26,14 +26,13 @@ struct ScIconSetFormatData;
 class ScXMLConditionalFormatsContext : public ScXMLImportContext
 {
 public:
-    ScXMLConditionalFormatsContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName );
+    ScXMLConditionalFormatsContext( ScXMLImport& rImport, sal_Int32 nElement );
 
     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 ScXMLConditionalFormatContext : public ScXMLImportContext
diff --git a/sc/source/filter/xml/xmllabri.cxx 
b/sc/source/filter/xml/xmllabri.cxx
index d895157866aa..2c8d31e105e0 100644
--- a/sc/source/filter/xml/xmllabri.cxx
+++ b/sc/source/filter/xml/xmllabri.cxx
@@ -21,6 +21,7 @@
 #include <xmloff/nmspmap.hxx>
 #include <xmloff/xmltoken.hxx>
 #include "xmlimprt.hxx"
+#include <xmloff/xmlnmspe.hxx>
 
 #include <o3tl/make_unique.hxx>
 
@@ -41,55 +42,49 @@ ScXMLLabelRangesContext::~ScXMLLabelRangesContext()
     GetScImport().UnlockSolarMutex();
 }
 
-SvXMLImportContext* ScXMLLabelRangesContext::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLName,
-        const uno::Reference< xml::sax::XAttributeList >& xAttrList )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL 
ScXMLLabelRangesContext::createFastChildContext(
+    sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& 
xAttrList )
 {
     SvXMLImportContext*     pContext(nullptr);
-    const SvXMLTokenMap&    
rTokenMap(GetScImport().GetLabelRangesElemTokenMap());
 
-    switch( rTokenMap.Get( nPrefix, rLName ) )
+    switch (nElement)
     {
-        case XML_TOK_LABEL_RANGE_ELEM:
-            pContext = new ScXMLLabelRangeContext( GetScImport(), nPrefix, 
rLName, xAttrList );
+        case XML_ELEMENT( TABLE, XML_LABEL_RANGE ):
+            pContext = new ScXMLLabelRangeContext( GetScImport(), nElement, 
xAttrList );
         break;
     }
     if( !pContext )
-        pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
+        pContext = new SvXMLImportContext( GetImport() );
 
     return pContext;
 }
 
 ScXMLLabelRangeContext::ScXMLLabelRangeContext(
         ScXMLImport& rImport,
-        sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const uno::Reference< xml::sax::XAttributeList >& xAttrList ) :
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+        sal_Int32 /*nElement*/,
+        const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ) :
+    ScXMLImportContext( rImport ),
     bColumnOrientation( false )
 {
-    sal_Int16               nAttrCount(xAttrList.is() ? xAttrList->getLength() 
: 0);
-    const SvXMLTokenMap&    
rAttrTokenMap(GetScImport().GetLabelRangeAttrTokenMap());
-
-    for( sal_Int16 nIndex = 0; nIndex < nAttrCount; ++nIndex )
+    if ( xAttrList.is() )
     {
-        const OUString& sAttrName  (xAttrList->getNameByIndex( nIndex ));
-        const OUString& sValue     (xAttrList->getValueByIndex( nIndex ));
-        OUString    aLocalName;
-        sal_uInt16      nPrefix     
(GetScImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ));
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( 
xAttrList );
 
-        switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_LABEL_RANGE_ATTR_LABEL_RANGE:
-                sLabelRangeStr = sValue;
-            break;
-            case XML_TOK_LABEL_RANGE_ATTR_DATA_RANGE:
-                sDataRangeStr = sValue;
-            break;
-            case XML_TOK_LABEL_RANGE_ATTR_ORIENTATION:
-                bColumnOrientation = IsXMLToken(sValue, XML_COLUMN );
-            break;
+            switch (aIter.getToken())
+            {
+            case XML_ELEMENT( TABLE, XML_LABEL_CELL_RANGE_ADDRESS ):
+                sLabelRangeStr = aIter.toString();
+                break;
+            case XML_ELEMENT( TABLE, XML_DATA_CELL_RANGE_ADDRESS ):
+                sDataRangeStr = aIter.toString();
+                break;
+            case XML_ELEMENT( TABLE, XML_ORIENTATION ):
+                bColumnOrientation = IsXMLToken(aIter, XML_COLUMN );
+                break;
+            }
         }
     }
 }
@@ -98,15 +93,13 @@ ScXMLLabelRangeContext::~ScXMLLabelRangeContext()
 {
 }
 
-SvXMLImportContext* ScXMLLabelRangeContext::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLName,
-        const uno::Reference< xml::sax::XAttributeList >& /* xAttrList */ )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL 
ScXMLLabelRangeContext::createFastChildContext(
+    sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList 
>& /*xAttrList*/ )
 {
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
+    return new SvXMLImportContext( GetImport() );
 }
 
-void ScXMLLabelRangeContext::EndElement()
+void SAL_CALL ScXMLLabelRangeContext::endFastElement( sal_Int32 /*nElement*/ )
 {
     //  Label ranges must be stored as strings until all sheets are loaded
     //  (like named expressions).
diff --git a/sc/source/filter/xml/xmllabri.hxx 
b/sc/source/filter/xml/xmllabri.hxx
index aab26fb46e5d..f4e3db7bc0cf 100644
--- a/sc/source/filter/xml/xmllabri.hxx
+++ b/sc/source/filter/xml/xmllabri.hxx
@@ -33,10 +33,10 @@ public:
                                     );
     virtual                     ~ScXMLLabelRangesContext() override;
 
-    virtual SvXMLImportContext* CreateChildContext(
-                                    sal_uInt16 nPrefix,
-                                    const OUString& rLocalName,
-                                    const css::uno::Reference< 
css::xml::sax::XAttributeList>& xAttrList
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
+                                createFastChildContext(
+                                    sal_Int32 nElement,
+                                    const css::uno::Reference< 
css::xml::sax::XFastAttributeList >& xAttrList
                                     ) override;
 };
 
@@ -50,18 +50,17 @@ private:
 public:
                                 ScXMLLabelRangeContext(
                                     ScXMLImport& rImport,
-                                    sal_uInt16 nPrefix,
-                                    const OUString& rLName,
-                                    const css::uno::Reference< 
css::xml::sax::XAttributeList>& xAttrList
+                                    sal_Int32 nElement,
+                                    const css::uno::Reference< 
css::xml::sax::XFastAttributeList>& xAttrList
                                     );
     virtual                     ~ScXMLLabelRangeContext() override;
 
-    virtual SvXMLImportContext* CreateChildContext(
-                                    sal_uInt16 nPrefix,
-                                    const OUString& rLocalName,
-                                    const css::uno::Reference< 
css::xml::sax::XAttributeList>& xAttrList
+    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;
 };
 
 #endif
diff --git a/sc/source/filter/xml/xmlsceni.cxx 
b/sc/source/filter/xml/xmlsceni.cxx
index 246317b3fe0b..024863fe50c0 100644
--- a/sc/source/filter/xml/xmlsceni.cxx
+++ b/sc/source/filter/xml/xmlsceni.cxx
@@ -28,6 +28,7 @@
 #include <xmloff/xmltkmap.hxx>
 #include <xmloff/nmspmap.hxx>
 #include <xmloff/xmltoken.hxx>
+#include <xmloff/xmlnmspe.hxx>
 
 #include <sax/tools/converter.hxx>
 
@@ -36,10 +37,9 @@ using namespace xmloff::token;
 
 ScXMLTableScenarioContext::ScXMLTableScenarioContext(
         ScXMLImport& rImport,
-        sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const uno::Reference< xml::sax::XAttributeList >& xAttrList ):
-    ScXMLImportContext( rImport, nPrfx, rLName ),
+        sal_Int32 /*nElement*/,
+        const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ):
+    ScXMLImportContext( rImport ),
     aBorderColor( COL_BLACK ),
     bDisplayBorder( true ),
     bCopyBack( true ),
@@ -49,66 +49,49 @@ ScXMLTableScenarioContext::ScXMLTableScenarioContext(
     bProtected( false )
 {
     rImport.LockSolarMutex();
-    sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
-    const SvXMLTokenMap& 
rAttrTokenMap(GetScImport().GetTableScenarioAttrTokenMap());
-    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_TABLE_SCENARIO_ATTR_DISPLAY_BORDER:
-            {
-                bDisplayBorder = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_BORDER_COLOR:
-            {
-                sal_Int32 nColor(0);
-                ::sax::Converter::convertColor(nColor, sValue);
-                aBorderColor.SetColor(nColor);
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_COPY_BACK:
-            {
-                bCopyBack = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_COPY_STYLES:
-            {
-                bCopyStyles = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_COPY_FORMULAS:
-            {
-                bCopyFormulas = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_IS_ACTIVE:
-            {
-                bIsActive = IsXMLToken(sValue, XML_TRUE);
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_SCENARIO_RANGES:
+            switch (aIter.getToken())
             {
+            case XML_ELEMENT( TABLE, XML_DISPLAY_BORDER ):
+                bDisplayBorder = IsXMLToken(aIter, XML_TRUE);
+                break;
+            case XML_ELEMENT( TABLE, XML_BORDER_COLOR ):
+                {
+                    sal_Int32 nColor(0);
+                    ::sax::Converter::convertColor(nColor, aIter.toString());
+                    aBorderColor.SetColor(nColor);
+                }
+                break;
+            case XML_ELEMENT( TABLE, XML_COPY_BACK ):
+                bCopyBack = IsXMLToken(aIter, XML_TRUE);
+                break;
+            case XML_ELEMENT( TABLE, XML_COPY_STYLES ):
+                bCopyStyles = IsXMLToken(aIter, XML_TRUE);
+                break;
+            case XML_ELEMENT( TABLE, XML_COPY_FORMULAS ):
+                bCopyFormulas = IsXMLToken(aIter, XML_TRUE);
+                break;
+            case XML_ELEMENT( TABLE, XML_IS_ACTIVE ):
+                bIsActive = IsXMLToken(aIter, XML_TRUE);
+                break;
+            case XML_ELEMENT( TABLE, XML_SCENARIO_RANGES ):
                 ScRangeStringConverter::GetRangeListFromString(
-                    aScenarioRanges, sValue, GetScImport().GetDocument(), 
::formula::FormulaGrammar::CONV_OOO );
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_COMMENT:
-            {
-                sComment = sValue;
-            }
-            break;
-            case XML_TOK_TABLE_SCENARIO_ATTR_PROTECTED:
-            {
-                bProtected = IsXMLToken(sValue, XML_TRUE);
+                    aScenarioRanges, aIter.toString(), 
GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO );
+                break;
+            case XML_ELEMENT( TABLE, XML_COMMENT ):
+                sComment = aIter.toString();
+                break;
+            case XML_ELEMENT( TABLE, XML_PROTECTED ):
+                bProtected = IsXMLToken(aIter, XML_TRUE);
+                break;
             }
-            break;
         }
     }
 }
@@ -118,15 +101,13 @@ ScXMLTableScenarioContext::~ScXMLTableScenarioContext()
     GetScImport().UnlockSolarMutex();
 }
 
-SvXMLImportContext *ScXMLTableScenarioContext::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLName,
-        const uno::Reference< xml::sax::XAttributeList >& /* xAttrList */ )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL 
ScXMLTableScenarioContext::createFastChildContext(
+    sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList 
>& /*xAttrList*/ )
 {
-    return new SvXMLImportContext( GetImport(), nPrefix, rLName );
+    return new SvXMLImportContext( GetImport() );
 }
 
-void ScXMLTableScenarioContext::EndElement()
+void SAL_CALL ScXMLTableScenarioContext::endFastElement( sal_Int32 
/*nElement*/ )
 {
     SCTAB nCurrTable( GetScImport().GetTables().GetCurrentSheet() );
     ScDocument* pDoc(GetScImport().GetDocument());
diff --git a/sc/source/filter/xml/xmlsceni.hxx 
b/sc/source/filter/xml/xmlsceni.hxx
index 0d971502486a..6aa3474aef37 100644
--- a/sc/source/filter/xml/xmlsceni.hxx
+++ b/sc/source/filter/xml/xmlsceni.hxx
@@ -42,17 +42,15 @@ private:
 
 public:
 
-    ScXMLTableScenarioContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
-                        const OUString& rLName,
-                        const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList );
+    ScXMLTableScenarioContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList );
 
     virtual ~ScXMLTableScenarioContext() 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;
 };
 
 #endif
diff --git a/sc/source/filter/xml/xmltabi.cxx b/sc/source/filter/xml/xmltabi.cxx
index 0bad32e4004d..28bfbe66a5c5 100644
--- a/sc/source/filter/xml/xmltabi.cxx
+++ b/sc/source/filter/xml/xmltabi.cxx
@@ -215,7 +215,7 @@ ScXMLTableContext::~ScXMLTableContext()
 
 SvXMLImportContext *ScXMLTableContext::CreateChildContext( sal_uInt16 nPrefix,
                                             const OUString& rLName,
-                                            const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList )
+                                            const 
css::uno::Reference<css::xml::sax::XAttributeList>& /*xAttrList*/ )
 {
     const SvXMLTokenMap& rTokenMap(GetScImport().GetTableElemTokenMap());
     sal_uInt16 nToken = rTokenMap.Get(nPrefix, rLName);
@@ -228,38 +228,6 @@ SvXMLImportContext *ScXMLTableContext::CreateChildContext( 
sal_uInt16 nPrefix,
 
     switch (nToken)
     {
-    case XML_TOK_TABLE_COL_GROUP:
-        pContext = new ScXMLTableColsContext( GetScImport(), nPrefix,
-                                                   rLName, xAttrList,
-                                                   false, true );
-        break;
-    case XML_TOK_TABLE_HEADER_COLS:
-        pContext = new ScXMLTableColsContext( GetScImport(), nPrefix,
-                                                   rLName, xAttrList,
-                                                   true, false );
-        break;
-    case XML_TOK_TABLE_COLS:
-        pContext = new ScXMLTableColsContext( GetScImport(), nPrefix,
-                                                   rLName, xAttrList,
-                                                   false, false );
-        break;
-    case XML_TOK_TABLE_COL:
-            pContext = new ScXMLTableColContext( GetScImport(), nPrefix,
-                                                      rLName, xAttrList );
-        break;
-    case XML_TOK_TABLE_PROTECTION:
-    case XML_TOK_TABLE_PROTECTION_EXT:
-        pContext = new ScXMLTableProtectionContext( GetScImport(), nPrefix, 
rLName, xAttrList );
-        break;
-    case XML_TOK_TABLE_SOURCE:
-        pContext = new ScXMLTableSourceContext( GetScImport(), nPrefix, 
rLName, xAttrList);
-        break;
-    case XML_TOK_TABLE_SCENARIO:
-        pContext = new ScXMLTableScenarioContext( GetScImport(), nPrefix, 
rLName, xAttrList);
-        break;
-    case XML_TOK_TABLE_SHAPES:
-        pContext = new ScXMLTableShapesContext( GetScImport(), nPrefix, 
rLName, xAttrList);
-        break;
     case XML_TOK_TABLE_FORMS:
         {
             
GetScImport().GetFormImport()->startPage(GetScImport().GetTables().GetCurrentXDrawPage());
@@ -275,9 +243,6 @@ SvXMLImportContext *ScXMLTableContext::CreateChildContext( 
sal_uInt16 nPrefix,
             pContext = new XMLEventsImportContext( GetImport(), nPrefix, 
rLName, xSupplier );
         }
         break;
-    case XML_TOK_TABLE_CONDFORMATS:
-        pContext = new ScXMLConditionalFormatsContext( GetScImport(), nPrefix, 
rLName );
-        break;
     default:
         ;
     }
@@ -328,6 +293,26 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
             new 
ScXMLNamedExpressionsContext::SheetLocalInserter(GetScImport(), nTab));
     }
         break;
+    case XML_ELEMENT( TABLE, XML_TABLE_COLUMN_GROUP ):
+        pContext = new ScXMLTableColsContext( GetScImport(), nElement, 
xAttrList,
+                                                   false, true );
+        break;
+    case XML_ELEMENT( TABLE, XML_TABLE_HEADER_COLUMNS ):
+        pContext = new ScXMLTableColsContext( GetScImport(), nElement, 
xAttrList,
+                                                   true, false );
+        break;
+    case XML_ELEMENT( TABLE, XML_TABLE_COLUMNS ):
+        pContext = new ScXMLTableColsContext( GetScImport(), nElement, 
xAttrList,
+                                                   false, false );
+        break;
+    case XML_ELEMENT( TABLE, XML_TABLE_COLUMN ):
+        pContext = new ScXMLTableColContext( GetScImport(), nElement, 
xAttrList );
+        break;
+    case XML_ELEMENT( TABLE, XML_TABLE_PROTECTION ):
+    case XML_ELEMENT( LO_EXT, XML_TABLE_PROTECTION ):
+    case XML_ELEMENT( OFFICE_EXT, XML_TABLE_PROTECTION ):
+        pContext = new ScXMLTableProtectionContext( GetScImport(), nElement, 
xAttrList );
+        break;
     case XML_ELEMENT( TABLE, XML_TABLE_ROW_GROUP ):
         pContext = new ScXMLTableRowsContext( GetScImport(), xAttrList,
                                                    false, true );
@@ -343,6 +328,18 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
     case XML_ELEMENT( TABLE, XML_TABLE_ROW ):
             pContext = new ScXMLTableRowContext( GetScImport(),xAttrList );
         break;
+    case XML_ELEMENT( TABLE, XML_TABLE_SOURCE ):
+        pContext = new ScXMLTableSourceContext( GetScImport(), nElement, 
xAttrList);
+        break;
+    case XML_ELEMENT( TABLE, XML_SCENARIO ):
+        pContext = new ScXMLTableScenarioContext( GetScImport(), nElement, 
xAttrList);
+        break;
+    case XML_ELEMENT( TABLE, XML_SHAPES ):
+        pContext = new ScXMLTableShapesContext( GetScImport(), nElement, 
xAttrList);
+        break;
+    case XML_ELEMENT( CALC_EXT, XML_CONDITIONAL_FORMATS ):
+        pContext = new ScXMLConditionalFormatsContext( GetScImport(), nElement 
);
+        break;
     default:
         pContext = new SvXMLImportContext( GetImport() );
     }
@@ -432,11 +429,10 @@ void SAL_CALL ScXMLTableContext::endFastElement(sal_Int32 
/*nElement*/)
 }
 
 ScXMLTableProtectionContext::ScXMLTableProtectionContext(
-    ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName,
-    const Reference<XAttributeList>& xAttrList ) :
-    ScXMLImportContext( rImport, nPrefix, rLName )
+    ScXMLImport& rImport, sal_Int32 /*nElement*/,
+    const Reference< xml::sax::XFastAttributeList>& xAttrList ) :
+    ScXMLImportContext( rImport )
 {
-    const SvXMLTokenMap& rAttrTokenMap = 
GetScImport().GetTableProtectionAttrTokenMap();
     bool bSelectProtectedCells = false;
     bool bSelectUnprotectedCells = false;
     bool bInsertColumns = false;
@@ -444,41 +440,42 @@ ScXMLTableProtectionContext::ScXMLTableProtectionContext(
     bool bDeleteColumns = false;
     bool bDeleteRows = false;
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-
-    for (sal_Int16 i = 0; i < nAttrCount; ++i)
+    if ( xAttrList.is() )
     {
-        const OUString& aAttrName = xAttrList->getNameByIndex(i);
-        const OUString aValue = xAttrList->getValueByIndex(i);
-
-        OUString aLocalName;
-        sal_uInt16 nLocalPrefix = 
GetScImport().GetNamespaceMap().GetKeyByAttrName(
-            aAttrName, &aLocalName);
+        sax_fastparser::FastAttributeList *pAttribList =
+            sax_fastparser::FastAttributeList::castToFastAttributeList( 
xAttrList );
 
-        switch (rAttrTokenMap.Get(nLocalPrefix, aLocalName))
+        for (auto &aIter : *pAttribList)
         {
-            case XML_TOK_TABLE_SELECT_PROTECTED_CELLS:
-            case XML_TOK_TABLE_SELECT_PROTECTED_CELLS_EXT:
-                bSelectProtectedCells = IsXMLToken(aValue, XML_TRUE);
+            sal_Int32 nToken = aIter.getToken();
+            switch (nToken)
+
+            {
+            case XML_ELEMENT( TABLE, XML_SELECT_PROTECTED_CELLS ):
+            case XML_ELEMENT( OFFICE_EXT, XML_SELECT_PROTECTED_CELLS ):
+            case XML_ELEMENT( LO_EXT, XML_SELECT_PROTECTED_CELLS ):
+                bSelectProtectedCells = IsXMLToken(aIter, XML_TRUE);
                 break;
-            case XML_TOK_TABLE_SELECT_UNPROTECTED_CELLS:
-            case XML_TOK_TABLE_SELECT_UNPROTECTED_CELLS_EXT:
-                bSelectUnprotectedCells = IsXMLToken(aValue, XML_TRUE);
+            case XML_ELEMENT( TABLE, XML_SELECT_UNPROTECTED_CELLS ):
+            case XML_ELEMENT( OFFICE_EXT, XML_SELECT_UNPROTECTED_CELLS ):
+            case XML_ELEMENT( LO_EXT, XML_SELECT_UNPROTECTED_CELLS ):
+                bSelectUnprotectedCells = IsXMLToken(aIter, XML_TRUE);
                 break;
-            case XML_TOK_TABLE_INSERT_COLUMNS_EXT:
-                bInsertColumns = IsXMLToken(aValue, XML_TRUE);
+            case XML_ELEMENT( LO_EXT, XML_INSERT_COLUMNS ):
+                bInsertColumns = IsXMLToken(aIter, XML_TRUE);
                 break;
-            case XML_TOK_TABLE_INSERT_ROWS_EXT:
-                bInsertRows = IsXMLToken(aValue, XML_TRUE);
+            case XML_ELEMENT( LO_EXT,  XML_INSERT_ROWS ):
+                bInsertRows = IsXMLToken(aIter, XML_TRUE);
                 break;
-            case XML_TOK_TABLE_DELETE_COLUMNS_EXT:
-                bDeleteColumns = IsXMLToken(aValue, XML_TRUE);
+            case XML_ELEMENT( LO_EXT, XML_DELETE_COLUMNS ):
+                bDeleteColumns = IsXMLToken(aIter, XML_TRUE);
                 break;
-            case XML_TOK_TABLE_DELETE_ROWS_EXT:
-                bDeleteRows = IsXMLToken(aValue, XML_TRUE);
+            case XML_ELEMENT( LO_EXT, XML_DELETE_ROWS ):
+                bDeleteRows = IsXMLToken(aIter, XML_TRUE);
                 break;
             default:
-                SAL_WARN("sc", "unknown attribute: " << aAttrName);
+                SAL_WARN("sc", "unknown attribute: " << nToken);
+            }
         }
     }
 
@@ -495,14 +492,10 @@ 
ScXMLTableProtectionContext::~ScXMLTableProtectionContext()
 {
 }
 
-SvXMLImportContext* ScXMLTableProtectionContext::CreateChildContext(
-    sal_uInt16 /*nPrefix*/, const OUString& /*rLocalName*/, const 
Reference<XAttributeList>& /*xAttrList*/ )
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL 
ScXMLTableProtectionContext::createFastChildContext(
+    sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList 
>& /*xAttrList*/ )
 {
     return nullptr;
 }
 
-void ScXMLTableProtectionContext::EndElement()
-{
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/xml/xmltabi.hxx b/sc/source/filter/xml/xmltabi.hxx
index d36f4d843f77..9f9775ec0876 100644
--- a/sc/source/filter/xml/xmltabi.hxx
+++ b/sc/source/filter/xml/xmltabi.hxx
@@ -67,17 +67,13 @@ public:
 class ScXMLTableProtectionContext : public ScXMLImportContext
 {
 public:
-    ScXMLTableProtectionContext( ScXMLImport& rImport, sal_uInt16 nPrefix,
-                        const OUString& rLName,
-                        const 
css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList );
+    ScXMLTableProtectionContext( ScXMLImport& rImport, sal_Int32 nElement,
+                        const 
css::uno::Reference<css::xml::sax::XFastAttributeList>& xAttrList );
 
     virtual ~ScXMLTableProtectionContext() 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;
 };
 
 #endif
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to