[Libreoffice-commits] core.git: include/xmloff reportdesign/source xmloff/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Wed Jan 22 07:37:30 UTC 2020


 include/xmloff/XMLCharContext.hxx                       |   12 ++
 reportdesign/source/filter/xml/xmlCell.cxx              |   96 ++++++++--------
 reportdesign/source/filter/xml/xmlCell.hxx              |   13 +-
 reportdesign/source/filter/xml/xmlColumn.cxx            |   54 +++------
 reportdesign/source/filter/xml/xmlColumn.hxx            |   11 -
 reportdesign/source/filter/xml/xmlComponent.cxx         |   32 +----
 reportdesign/source/filter/xml/xmlComponent.hxx         |    4 
 reportdesign/source/filter/xml/xmlCondPrtExpr.cxx       |   26 +---
 reportdesign/source/filter/xml/xmlCondPrtExpr.hxx       |    6 -
 reportdesign/source/filter/xml/xmlControlProperty.cxx   |   54 +++------
 reportdesign/source/filter/xml/xmlControlProperty.hxx   |   13 --
 reportdesign/source/filter/xml/xmlFixedContent.cxx      |   63 +++-------
 reportdesign/source/filter/xml/xmlFixedContent.hxx      |   12 --
 reportdesign/source/filter/xml/xmlFormatCondition.cxx   |   27 +---
 reportdesign/source/filter/xml/xmlFormatCondition.hxx   |    7 -
 reportdesign/source/filter/xml/xmlFormattedField.cxx    |   25 +---
 reportdesign/source/filter/xml/xmlFormattedField.hxx    |    4 
 reportdesign/source/filter/xml/xmlFunction.cxx          |   35 ++---
 reportdesign/source/filter/xml/xmlFunction.hxx          |    6 -
 reportdesign/source/filter/xml/xmlGroup.cxx             |   68 ++++-------
 reportdesign/source/filter/xml/xmlGroup.hxx             |   11 -
 reportdesign/source/filter/xml/xmlImage.cxx             |   27 +---
 reportdesign/source/filter/xml/xmlImage.hxx             |    5 
 reportdesign/source/filter/xml/xmlMasterFields.cxx      |   43 ++-----
 reportdesign/source/filter/xml/xmlMasterFields.hxx      |   11 -
 reportdesign/source/filter/xml/xmlReport.cxx            |   80 ++++++-------
 reportdesign/source/filter/xml/xmlReport.hxx            |   14 +-
 reportdesign/source/filter/xml/xmlReportElement.cxx     |   49 +++-----
 reportdesign/source/filter/xml/xmlReportElement.hxx     |   10 -
 reportdesign/source/filter/xml/xmlReportElementBase.cxx |   38 ++----
 reportdesign/source/filter/xml/xmlReportElementBase.hxx |   17 +-
 reportdesign/source/filter/xml/xmlSection.cxx           |   46 +++----
 reportdesign/source/filter/xml/xmlSection.hxx           |    9 -
 reportdesign/source/filter/xml/xmlSubDocument.cxx       |   54 +++++----
 reportdesign/source/filter/xml/xmlSubDocument.hxx       |   13 +-
 reportdesign/source/filter/xml/xmlTable.cxx             |   69 +++++------
 reportdesign/source/filter/xml/xmlTable.hxx             |   11 -
 reportdesign/source/filter/xml/xmlfilter.cxx            |   24 ++--
 reportdesign/source/filter/xml/xmlfilter.hxx            |   14 +-
 xmloff/source/text/txtparai.cxx                         |   62 ++++++++++
 40 files changed, 550 insertions(+), 625 deletions(-)

New commits:
commit 357bf8984ada1259720903ad7c7c44c9a6551cc8
Author:     Noel Grandin <noelgrandin at gmail.com>
AuthorDate: Tue Jan 21 21:44:49 2020 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Wed Jan 22 08:36:51 2020 +0100

    Convert reportdesign to fastparser
    
    Change-Id: I0703344aad4ca6c72e494160b019c13e24cc843a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87160
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/xmloff/XMLCharContext.hxx b/include/xmloff/XMLCharContext.hxx
index 64598e21a1d7..4883a39f7922 100644
--- a/include/xmloff/XMLCharContext.hxx
+++ b/include/xmloff/XMLCharContext.hxx
@@ -48,9 +48,21 @@ public:
             const OUString& rLName,
             const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList,
             sal_Int16 nControl );
+    XMLCharContext(
+            SvXMLImport& rImport,
+            const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList,
+            sal_Unicode c,
+            bool bCount );
+    XMLCharContext(
+            SvXMLImport& rImport,
+            sal_Int16 nControl );
 
     virtual ~XMLCharContext() override;
 
+    // EndElement is called before a context will be destructed, but
+    // after an elements context has been parsed. It may be used for actions
+    // that require virtual methods. The default is to do nothing.
+    virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
     // EndElement is called before a context will be destructed, but
     // after an elements context has been parsed. It may be used for actions
     // that require virtual methods. The default is to do nothing.
diff --git a/reportdesign/source/filter/xml/xmlCell.cxx b/reportdesign/source/filter/xml/xmlCell.cxx
index 0c6646d11934..74a23667863f 100644
--- a/reportdesign/source/filter/xml/xmlCell.cxx
+++ b/reportdesign/source/filter/xml/xmlCell.cxx
@@ -46,12 +46,10 @@ namespace rptxml
 
 
 OXMLCell::OXMLCell( ORptFilter& rImport
-                ,sal_uInt16 nPrfx
-                ,const OUString& _sLocalName
-                ,const Reference< XAttributeList > & _xAttrList
+                ,const Reference< XFastAttributeList > & _xAttrList
                 ,OXMLTable* _pContainer
                 ,OXMLCell* _pCell) :
-    SvXMLImportContext( rImport, nPrfx, _sLocalName )
+    SvXMLImportContext( rImport )
     ,m_pContainer(_pContainer)
     ,m_pCell(_pCell)
     ,m_nCurrentCount(0)
@@ -60,27 +58,21 @@ OXMLCell::OXMLCell( ORptFilter& rImport
     if ( !m_pCell )
         m_pCell = this;
 
-    OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!");
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetColumnTokenMap();
-
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
-    for(sal_Int16 i = 0; i < nLength; ++i)
+    sax_fastparser::FastAttributeList *pAttribList =
+                    sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+    for (auto &aIter : *pAttribList)
     {
-        OUString sLocalName;
-        const OUString sAttrName = _xAttrList->getNameByIndex( i );
-        const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-        const OUString sValue = _xAttrList->getValueByIndex( i );
+        OUString sValue = aIter.toString();
 
-        switch( rTokenMap.Get( nPrefix, sLocalName ) )
+        switch( aIter.getToken() )
         {
-            case XML_TOK_COLUMN_STYLE_NAME:
+            case XML_ELEMENT(TABLE, XML_STYLE_NAME):
                 m_sStyleName = sValue;
                 break;
-            case XML_TOK_NUMBER_COLUMNS_SPANNED:
+            case XML_ELEMENT(TABLE, XML_NUMBER_COLUMNS_SPANNED):
                 m_pContainer->setColumnSpanned(sValue.toInt32());
                 break;
-            case XML_TOK_NUMBER_ROWS_SPANNED:
+            case XML_ELEMENT(TABLE, XML_NUMBER_ROWS_SPANNED):
                 m_pContainer->setRowSpanned(sValue.toInt32());
                 break;
             default:
@@ -101,25 +93,48 @@ SvXMLImportContextRef OXMLCell::CreateChildContext(
     SvXMLImportContext *pContext = nullptr;
     ORptFilter& rImport = GetOwnImport();
     const SvXMLTokenMap&    rTokenMap   = rImport.GetCellElemTokenMap();
+    const sal_uInt16 nToken = rTokenMap.Get( _nPrefix, _rLocalName );
+    switch( nToken )
+    {
+        case XML_TOK_CUSTOM_SHAPE:
+        case XML_TOK_FRAME:
+            {
+                if ( !m_bContainsShape )
+                    m_nCurrentCount = m_pContainer->getSection()->getCount();
+                rtl::Reference< XMLShapeImportHelper > xShapeImportHelper = rImport.GetShapeImport();
+                uno::Reference< drawing::XShapes > xShapes = m_pContainer->getSection().get();
+                pContext = xShapeImportHelper->CreateGroupChildContext(rImport,_nPrefix,_rLocalName,xAttrList,xShapes);
+                m_bContainsShape = true;
+            }
+            break;
+    }
+    return pContext;
+}
+
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLCell::createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
+{
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
+    ORptFilter& rImport = GetOwnImport();
     Reference<XMultiServiceFactory> xFactor(rImport.GetModel(),uno::UNO_QUERY);
     static const char s_sStringConcat[] = " & ";
 
-    const sal_uInt16 nToken = rTokenMap.Get( _nPrefix, _rLocalName );
-    switch( nToken )
+    switch( nElement )
     {
-        case XML_TOK_FIXED_CONTENT:
+        case XML_ELEMENT(REPORT, XML_FIXED_CONTENT):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                pContext = new OXMLFixedContent( rImport, _nPrefix, _rLocalName,*m_pCell,m_pContainer);
+                xContext = new OXMLFixedContent( rImport,*m_pCell,m_pContainer);
             }
             break;
-        case XML_TOK_PAGE_NUMBER:
+        case XML_ELEMENT(TEXT, XML_PAGE_NUMBER):
             m_sText += OUStringLiteral(s_sStringConcat) + " PageNumber()";
             break;
-        case XML_TOK_PAGE_COUNT:
+        case XML_ELEMENT(TEXT, XML_PAGE_COUNT):
             m_sText += OUStringLiteral(s_sStringConcat) + " PageCount()";
             break;
-        case XML_TOK_FORMATTED_TEXT:
+        case XML_ELEMENT(REPORT, XML_FORMATTED_TEXT):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 uno::Reference< uno::XInterface> xInt = xFactor->createInstance(SERVICE_FORMATTEDFIELD);
@@ -128,10 +143,10 @@ SvXMLImportContextRef OXMLCell::CreateChildContext(
                 OSL_ENSURE(xControl.is(),"Could not create FormattedField!");
                 setComponent(xControl.get());
                 if ( xControl.is() )
-                    pContext = new OXMLFormattedField( rImport, _nPrefix, _rLocalName,xAttrList,xControl.get(),m_pContainer,XML_TOK_PAGE_COUNT == nToken);
+                    xContext = new OXMLFormattedField( rImport,xAttrList,xControl.get(),m_pContainer, false);
             }
             break;
-        case XML_TOK_IMAGE:
+        case XML_ELEMENT(REPORT, XML_IMAGE):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 Reference< XImageControl > xControl(xFactor->createInstance(SERVICE_IMAGECONTROL),uno::UNO_QUERY);
@@ -139,33 +154,22 @@ SvXMLImportContextRef OXMLCell::CreateChildContext(
                 OSL_ENSURE(xControl.is(),"Could not create ImageControl!");
                 setComponent(xControl.get());
                 if ( xControl.is() )
-                    pContext = new OXMLImage( rImport, _nPrefix, _rLocalName,xAttrList,xControl.get(),m_pContainer);
+                    xContext = new OXMLImage( rImport,xAttrList,xControl.get(),m_pContainer);
             }
             break;
-        case XML_TOK_SUB_DOCUMENT:
+        case XML_ELEMENT(REPORT, XML_SUB_DOCUMENT):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 if ( !m_bContainsShape )
                     m_nCurrentCount = m_pContainer->getSection()->getCount();
                 uno::Reference< uno::XInterface> xInt = xFactor->createInstance(SERVICE_FORMATTEDFIELD);
                 Reference< report::XFormattedField > xControl(xInt,uno::UNO_QUERY);
-                pContext = new OXMLSubDocument( rImport, _nPrefix, _rLocalName,xControl.get(),m_pContainer, this /* give the current cell as parent*/ );
+                xContext = new OXMLSubDocument( rImport,xControl.get(),m_pContainer, this /* give the current cell as parent*/ );
             }
             break;
 
-        case XML_TOK_P:
-            pContext = new OXMLCell( rImport, _nPrefix, _rLocalName,xAttrList ,m_pContainer,this);
-            break;
-        case XML_TOK_CUSTOM_SHAPE:
-        case XML_TOK_FRAME:
-            {
-                if ( !m_bContainsShape )
-                    m_nCurrentCount = m_pContainer->getSection()->getCount();
-                rtl::Reference< XMLShapeImportHelper > xShapeImportHelper = rImport.GetShapeImport();
-                uno::Reference< drawing::XShapes > xShapes = m_pContainer->getSection().get();
-                pContext = xShapeImportHelper->CreateGroupChildContext(rImport,_nPrefix,_rLocalName,xAttrList,xShapes);
-                m_bContainsShape = true;
-            }
+        case XML_ELEMENT(TEXT, XML_P):
+            xContext = new OXMLCell( rImport,xAttrList ,m_pContainer,this);
             break;
         default:
             break;
@@ -174,10 +178,10 @@ SvXMLImportContextRef OXMLCell::CreateChildContext(
     if ( m_xComponent.is() )
         m_pContainer->addCell(m_xComponent);
 
-    return pContext;
+    return xContext;
 }
 
-void OXMLCell::EndElement()
+void OXMLCell::endFastElement(sal_Int32)
 {
     if ( m_bContainsShape )
     {
@@ -247,7 +251,7 @@ void OXMLCell::setComponent(const uno::Reference< report::XReportComponent >& _x
     m_xComponent = _xComponent;
 }
 
-void OXMLCell::Characters( const OUString& rChars )
+void OXMLCell::characters( const OUString& rChars )
 {
     if ( !rChars.isEmpty() )
     {
diff --git a/reportdesign/source/filter/xml/xmlCell.hxx b/reportdesign/source/filter/xml/xmlCell.hxx
index 059d58f3636f..998e3a936f54 100644
--- a/reportdesign/source/filter/xml/xmlCell.hxx
+++ b/reportdesign/source/filter/xml/xmlCell.hxx
@@ -42,9 +42,7 @@ namespace rptxml
     public:
 
         OXMLCell( ORptFilter& rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,OXMLTable* _pContainer
                     ,OXMLCell* _pCell = nullptr);
         virtual ~OXMLCell() override;
@@ -53,8 +51,13 @@ namespace rptxml
                     const OUString& rLocalName,
                     const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override;
 
-        virtual void Characters( const OUString& rChars ) 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;
+
+        virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {}
+        virtual void SAL_CALL characters( const OUString& rChars ) override;
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
 
         void setComponent(const css::uno::Reference< css::report::XReportComponent >& _xComponent);
         void setContainsShape(bool _bContainsShapes);
diff --git a/reportdesign/source/filter/xml/xmlColumn.cxx b/reportdesign/source/filter/xml/xmlColumn.cxx
index 6498296cc441..13e6b0767578 100644
--- a/reportdesign/source/filter/xml/xmlColumn.cxx
+++ b/reportdesign/source/filter/xml/xmlColumn.cxx
@@ -46,29 +46,21 @@ namespace rptxml
 
 
 OXMLRowColumn::OXMLRowColumn( ORptFilter& rImport
-                ,sal_uInt16 nPrfx
-                ,const OUString& _sLocalName
-                ,const Reference< XAttributeList > & _xAttrList
+                ,const Reference< XFastAttributeList > & _xAttrList
                 ,OXMLTable* _pContainer
                 ) :
-    SvXMLImportContext( rImport, nPrfx, _sLocalName )
+    SvXMLImportContext( rImport )
     ,m_pContainer(_pContainer)
 {
-
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetColumnTokenMap();
-
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
-    for(sal_Int16 i = 0; i < nLength; ++i)
+    sax_fastparser::FastAttributeList *pAttribList =
+                    sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+    for (auto &aIter : *pAttribList)
     {
-        OUString sLocalName;
-        const OUString sAttrName = _xAttrList->getNameByIndex( i );
-        const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-        const OUString sValue = _xAttrList->getValueByIndex( i );
+        OUString sValue = aIter.toString();
 
-        switch( rTokenMap.Get( nPrefix, sLocalName ) )
+        switch( aIter.getToken() )
         {
-            case XML_TOK_COLUMN_STYLE_NAME:
+            case XML_ELEMENT(TABLE, XML_STYLE_NAME):
                 fillStyle(sValue);
                 break;
             default:
@@ -82,32 +74,30 @@ OXMLRowColumn::~OXMLRowColumn()
 {
 }
 
-SvXMLImportContextRef OXMLRowColumn::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLRowColumn::createFastChildContext(
+        sal_Int32 nElement,
+        const Reference< XFastAttributeList > & xAttrList )
 {
-    SvXMLImportContext *pContext = nullptr;
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
     ORptFilter& rImport = GetOwnImport();
-    const SvXMLTokenMap&    rTokenMap   = rImport.GetColumnTokenMap();
 
-    switch( rTokenMap.Get( nPrefix, rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_COLUMN:
+        case XML_ELEMENT(TABLE, XML_TABLE_COLUMN):
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLRowColumn( rImport, nPrefix, rLocalName,xAttrList,m_pContainer);
+            xContext = new OXMLRowColumn( rImport,xAttrList,m_pContainer);
             break;
-        case XML_TOK_ROW:
+        case XML_ELEMENT(TABLE, XML_TABLE_ROW):
             m_pContainer->incrementRowIndex();
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLRowColumn( rImport, nPrefix, rLocalName,xAttrList,m_pContainer);
+            xContext = new OXMLRowColumn( rImport,xAttrList,m_pContainer);
             break;
-        case XML_TOK_CELL:
+        case XML_ELEMENT(TABLE, XML_TABLE_CELL):
             m_pContainer->incrementColumnIndex();
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLCell( rImport, nPrefix, rLocalName,xAttrList,m_pContainer);
+            xContext = new OXMLCell( rImport,xAttrList,m_pContainer);
             break;
-        case XML_TOK_COV_CELL:
+        case XML_ELEMENT(TABLE, XML_COVERED_TABLE_CELL):
             m_pContainer->incrementColumnIndex();
             m_pContainer->addCell(nullptr);
             break;
@@ -115,7 +105,7 @@ SvXMLImportContextRef OXMLRowColumn::CreateChildContext(
             break;
     }
 
-    return pContext;
+    return xContext;
 }
 
 void OXMLRowColumn::fillStyle(const OUString& _sStyleName)
@@ -174,7 +164,7 @@ ORptFilter& OXMLRowColumn::GetOwnImport()
     return static_cast<ORptFilter&>(GetImport());
 }
 
-void OXMLRowColumn::EndElement()
+void OXMLRowColumn::endFastElement(sal_Int32 )
 {
 }
 
diff --git a/reportdesign/source/filter/xml/xmlColumn.hxx b/reportdesign/source/filter/xml/xmlColumn.hxx
index 0aa34130d8d1..16e739e9bca1 100644
--- a/reportdesign/source/filter/xml/xmlColumn.hxx
+++ b/reportdesign/source/filter/xml/xmlColumn.hxx
@@ -37,17 +37,14 @@ namespace rptxml
     public:
 
         OXMLRowColumn( ORptFilter& rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,OXMLTable* _pContainer
                     );
         virtual ~OXMLRowColumn() override;
 
-        virtual SvXMLImportContextRef 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;
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlComponent.cxx b/reportdesign/source/filter/xml/xmlComponent.cxx
index 976a7393a448..d63ccd713853 100644
--- a/reportdesign/source/filter/xml/xmlComponent.cxx
+++ b/reportdesign/source/filter/xml/xmlComponent.cxx
@@ -38,41 +38,27 @@ namespace rptxml
     using namespace ::com::sun::star::report;
     using namespace ::com::sun::star::xml::sax;
 OXMLComponent::OXMLComponent( ORptFilter& _rImport
-                ,sal_uInt16 nPrfx
-                ,const OUString& _sLocalName
-                ,const Reference< XAttributeList > & _xAttrList
+                ,const Reference< XFastAttributeList > & _xAttrList
                 ,const Reference< XReportComponent > & _xComponent
                 ) :
-    SvXMLImportContext( _rImport, nPrfx, _sLocalName )
+    SvXMLImportContext( _rImport )
     ,m_xComponent(_xComponent)
 {
-    OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!");
     OSL_ENSURE(m_xComponent.is(),"Component is NULL!");
 
-    const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = _rImport.GetComponentElemTokenMap();
-
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
-
-    for(sal_Int16 i = 0; i < nLength; ++i)
+    sax_fastparser::FastAttributeList *pAttribList =
+                    sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+    for (auto &aIter : *pAttribList)
     {
+        OUString sValue = aIter.toString();
+
         try
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            const OUString sValue = _xAttrList->getValueByIndex( i );
-
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_NAME:
+                case XML_ELEMENT(DRAW, XML_NAME):
                     m_xComponent->setName(sValue);
                     break;
-                case XML_TOK_TEXT_STYLE_NAME:
-                case XML_TOK_TRANSFORM:
-                    break;
-                default:
-                    break;
             }
         }
         catch(const Exception&)
diff --git a/reportdesign/source/filter/xml/xmlComponent.hxx b/reportdesign/source/filter/xml/xmlComponent.hxx
index be6822fa9cd2..efe4849aa705 100644
--- a/reportdesign/source/filter/xml/xmlComponent.hxx
+++ b/reportdesign/source/filter/xml/xmlComponent.hxx
@@ -35,9 +35,7 @@ namespace rptxml
     public:
 
         OXMLComponent( ORptFilter& rImport
-                    , sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XReportComponent >& _xComponent
                     );
         virtual ~OXMLComponent() override;
diff --git a/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx b/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx
index 9a2ec9e1ad60..7826f121a57e 100644
--- a/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx
+++ b/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx
@@ -33,30 +33,24 @@ namespace rptxml
     using namespace uno;
     using namespace xml::sax;
 
-OXMLCondPrtExpr::OXMLCondPrtExpr( ORptFilter& _rImport,
-                sal_uInt16 nPrfx
-                ,const OUString& rLName
-                ,const uno::Reference< xml::sax::XAttributeList > & _xAttrList
+OXMLCondPrtExpr::OXMLCondPrtExpr( ORptFilter& _rImport
+                ,const uno::Reference< xml::sax::XFastAttributeList > & _xAttrList
                 ,const Reference< XPropertySet > & _xComponent ) :
-    SvXMLImportContext( _rImport, nPrfx, rLName )
+    SvXMLImportContext( _rImport )
 ,m_xComponent(_xComponent)
 {
     OSL_ENSURE(m_xComponent.is(),"Component is NULL!");
-    const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = _rImport.GetFunctionElemTokenMap();
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     try
     {
-        for(sal_Int16 i = 0; i < nLength; ++i)
+        sax_fastparser::FastAttributeList *pAttribList =
+                        sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+        for (auto &aIter : *pAttribList)
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            const OUString sValue = _xAttrList->getValueByIndex( i );
+            OUString sValue = aIter.toString();
 
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_FUNCTION_FORMULA:
+                case XML_ELEMENT(REPORT, XML_FORMULA):
                     m_xComponent->setPropertyValue(PROPERTY_CONDITIONALPRINTEXPRESSION,uno::makeAny(ORptFilter::convertFormula(sValue)));
                     break;
                 default:
@@ -77,7 +71,7 @@ OXMLCondPrtExpr::~OXMLCondPrtExpr()
 }
 
 
-void OXMLCondPrtExpr::Characters( const OUString& rChars )
+void OXMLCondPrtExpr::characters( const OUString& rChars )
 {
     m_xComponent->setPropertyValue(PROPERTY_CONDITIONALPRINTEXPRESSION,makeAny(rChars));
 }
diff --git a/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx b/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx
index 8d757bc0469f..426188efcc63 100644
--- a/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx
+++ b/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx
@@ -33,15 +33,13 @@ namespace rptxml
     public:
 
         OXMLCondPrtExpr( ORptFilter& _rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & _xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & _xAttrList
                     ,const css::uno::Reference< css::beans::XPropertySet >& _xComponent);
         virtual ~OXMLCondPrtExpr() override;
 
         // This method is called for all characters that are contained in the
         // current element. The default is to ignore them.
-        virtual void Characters( const OUString& rChars ) override;
+        virtual void SAL_CALL characters( const OUString& rChars ) override;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlControlProperty.cxx b/reportdesign/source/filter/xml/xmlControlProperty.cxx
index 3f31577f842f..19b0c77aa67a 100644
--- a/reportdesign/source/filter/xml/xmlControlProperty.cxx
+++ b/reportdesign/source/filter/xml/xmlControlProperty.cxx
@@ -49,38 +49,30 @@ namespace rptxml
     using namespace ::com::sun::star::xml::sax;
 
 OXMLControlProperty::OXMLControlProperty( ORptFilter& rImport
-                ,sal_uInt16 nPrfx
-                ,const OUString& _sLocalName
-                ,const Reference< XAttributeList > & _xAttrList
+                ,const Reference< XFastAttributeList > & _xAttrList
                 ,const Reference< XPropertySet >& _xControl
                 ,OXMLControlProperty* _pContainer) :
-    SvXMLImportContext( rImport, nPrfx, _sLocalName )
+    SvXMLImportContext( rImport )
     ,m_xControl(_xControl)
     ,m_pContainer(_pContainer)
     ,m_bIsList(false)
 {
     m_aPropType = cppu::UnoType<void>::get();
 
-    OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!");
     OSL_ENSURE(m_xControl.is(),"Control is NULL!");
 
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetControlPropertyElemTokenMap();
-
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
-    for(sal_Int16 i = 0; i < nLength; ++i)
+    sax_fastparser::FastAttributeList *pAttribList =
+                    sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+    for (auto &aIter : *pAttribList)
     {
-        OUString sLocalName;
-        const OUString sAttrName = _xAttrList->getNameByIndex( i );
-        const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-        const OUString sValue = _xAttrList->getValueByIndex( i );
+        OUString sValue = aIter.toString();
 
-        switch( rTokenMap.Get( nPrefix, sLocalName ) )
+        switch( aIter.getToken() )
         {
-            case XML_TOK_LIST_PROPERTY:
+            case XML_ELEMENT(FORM, XML_LIST_PROPERTY):
                 m_bIsList = sValue == "true";
                 break;
-            case XML_TOK_VALUE_TYPE:
+            case XML_ELEMENT(OOO, XML_VALUE_TYPE):
                 {
                     // needs to be translated into a css::uno::Type
                     static std::map< OUString, css::uno::Type > const s_aTypeNameMap
@@ -103,7 +95,7 @@ OXMLControlProperty::OXMLControlProperty( ORptFilter& rImport
                         m_aPropType = aTypePos->second;
                 }
                 break;
-            case XML_TOK_PROPERTY_NAME:
+            case XML_ELEMENT(FORM, XML_PROPERTY_NAME):
                 m_aSetting.Name = sValue;
                 break;
             default:
@@ -118,33 +110,31 @@ OXMLControlProperty::~OXMLControlProperty()
 {
 }
 
-SvXMLImportContextRef OXMLControlProperty::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLControlProperty::createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
 {
-    SvXMLImportContext *pContext = nullptr;
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
     ORptFilter& rImport = GetOwnImport();
-    const SvXMLTokenMap&    rTokenMap   = rImport.GetControlPropertyElemTokenMap();
 
-    switch( rTokenMap.Get( nPrefix, rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_LIST_PROPERTY:
+        case XML_ELEMENT(FORM, XML_LIST_PROPERTY):
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLControlProperty( rImport, nPrefix, rLocalName,xAttrList,m_xControl);
+            xContext = new OXMLControlProperty( rImport,xAttrList,m_xControl);
             break;
-        case XML_TOK_VALUE:
+        case XML_ELEMENT(OOO, XML_VALUE):
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLControlProperty( rImport, nPrefix, rLocalName,xAttrList,m_xControl,this );
+            xContext = new OXMLControlProperty( rImport,xAttrList,m_xControl,this );
             break;
         default:
             break;
     }
 
-    return pContext;
+    return xContext;
 }
 
-void OXMLControlProperty::EndElement()
+void OXMLControlProperty::endFastElement(sal_Int32 )
 {
     if ( !m_aSetting.Name.isEmpty() && m_xControl.is() )
     {
@@ -161,7 +151,7 @@ void OXMLControlProperty::EndElement()
     }
 }
 
-void OXMLControlProperty::Characters( const OUString& rChars )
+void OXMLControlProperty::characters( const OUString& rChars )
 {
     if ( m_pContainer )
         m_pContainer->addValue(rChars);
diff --git a/reportdesign/source/filter/xml/xmlControlProperty.hxx b/reportdesign/source/filter/xml/xmlControlProperty.hxx
index 8b2bf6440be2..15379d27b720 100644
--- a/reportdesign/source/filter/xml/xmlControlProperty.hxx
+++ b/reportdesign/source/filter/xml/xmlControlProperty.hxx
@@ -45,20 +45,17 @@ namespace rptxml
     public:
 
         OXMLControlProperty( ORptFilter& rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::beans::XPropertySet >& _xControl
                     ,OXMLControlProperty* _pContainer = nullptr);
         virtual ~OXMLControlProperty() override;
 
-        virtual SvXMLImportContextRef 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;
 
-        virtual void Characters( const OUString& rChars ) override;
+        virtual void SAL_CALL characters( const OUString& rChars ) override;
 
 
         /** adds value to property
diff --git a/reportdesign/source/filter/xml/xmlFixedContent.cxx b/reportdesign/source/filter/xml/xmlFixedContent.cxx
index 0f33f91e98a9..3836e7ab06b1 100644
--- a/reportdesign/source/filter/xml/xmlFixedContent.cxx
+++ b/reportdesign/source/filter/xml/xmlFixedContent.cxx
@@ -46,17 +46,12 @@ public:
     OXMLCharContent(
             SvXMLImport& rImport,
             OXMLFixedContent* _pFixedContent,
-            sal_uInt16 nPrfx,
-            const OUString& rLName,
-            const uno::Reference< xml::sax::XAttributeList > & xAttrList,
+            const uno::Reference< xml::sax::XFastAttributeList > & xAttrList,
             sal_Unicode c,
             bool bCount );
     OXMLCharContent(
             SvXMLImport& rImport,
             OXMLFixedContent* _pFixedContent,
-            sal_uInt16 nPrfx,
-            const OUString& rLName,
-            const uno::Reference< xml::sax::XAttributeList > & xAttrList,
             sal_Int16 nControl );
     OXMLCharContent(const OXMLCharContent&) = delete;
     OXMLCharContent& operator=(const OXMLCharContent&) = delete;
@@ -70,12 +65,10 @@ public:
 OXMLCharContent::OXMLCharContent(
         SvXMLImport& rImport,
         OXMLFixedContent* _pFixedContent,
-        sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const uno::Reference< xml::sax::XAttributeList > & xAttrList,
+        const uno::Reference< xml::sax::XFastAttributeList > & xAttrList,
         sal_Unicode c,
         bool bCount )
-    : XMLCharContext(rImport,nPrfx,rLName,xAttrList,c,bCount)
+    : XMLCharContext(rImport,xAttrList,c,bCount)
     ,m_pFixedContent(_pFixedContent)
 {
 }
@@ -83,11 +76,8 @@ OXMLCharContent::OXMLCharContent(
 OXMLCharContent::OXMLCharContent(
         SvXMLImport& rImport,
         OXMLFixedContent* _pFixedContent,
-        sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const uno::Reference< xml::sax::XAttributeList > & xAttrList,
         sal_Int16 nControl )
-    : XMLCharContext(rImport,nPrfx,rLName,xAttrList,nControl)
+    : XMLCharContext(rImport,nControl)
     ,m_pFixedContent(_pFixedContent)
 {
 }
@@ -111,12 +101,11 @@ void OXMLCharContent::InsertString(const OUString& _sString)
 }
 
 
-OXMLFixedContent::OXMLFixedContent( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName
+OXMLFixedContent::OXMLFixedContent( ORptFilter& rImport
                 ,OXMLCell& _rCell
                 ,OXMLTable* _pContainer
                 ,OXMLFixedContent* _pInP) :
-    OXMLReportElementBase( rImport, nPrfx, rLName,nullptr,_pContainer)
+    OXMLReportElementBase( rImport,nullptr,_pContainer)
 ,m_rCell(_rCell)
 ,m_pInP(_pInP)
 ,m_bFormattedField(false)
@@ -130,47 +119,41 @@ OXMLFixedContent::~OXMLFixedContent()
 }
 
 
-SvXMLImportContextRef OXMLFixedContent::CreateChildContext_(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLFixedContent::createFastChildContext_(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList )
 {
-    SvXMLImportContextRef xContext = OXMLReportElementBase::CreateChildContext_(nPrefix,rLocalName,xAttrList);
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = OXMLReportElementBase::createFastChildContext_(nElement,xAttrList);
     if (xContext)
         return xContext;
 
     static const char s_sStringConcat[] = " & ";
-    const SvXMLTokenMap&    rTokenMap   = m_rImport.GetCellElemTokenMap();
 
     m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-    const sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName );
-    switch( nToken )
+    switch( nElement )
     {
-        case XML_TOK_P:
-            xContext = new OXMLFixedContent(m_rImport,nPrefix, rLocalName,m_rCell,m_pContainer,this);
+        case XML_ELEMENT(TEXT, XML_P):
+            xContext = new OXMLFixedContent(m_rImport,m_rCell,m_pContainer,this);
             break;
-        case XML_TOK_TEXT_TAB_STOP:
-            xContext = new OXMLCharContent( m_rImport, this,nPrefix,
-                                                rLocalName, xAttrList,
+        case XML_ELEMENT(TEXT, XML_TAB):
+            xContext = new OXMLCharContent( m_rImport, this, xAttrList,
                                                 0x0009, false );
             break;
 
-        case XML_TOK_TEXT_LINE_BREAK:
-            xContext = new OXMLCharContent( m_rImport, this,nPrefix,
-                                                rLocalName, xAttrList,
+        case XML_ELEMENT(TEXT, XML_LINE_BREAK):
+            xContext = new OXMLCharContent( m_rImport, this,
                                                 ControlCharacter::LINE_BREAK );
             break;
 
-        case XML_TOK_TEXT_S:
-            xContext = new OXMLCharContent( m_rImport, this,nPrefix,
-                                                rLocalName, xAttrList,
+        case XML_ELEMENT(TEXT, XML_S):
+            xContext = new OXMLCharContent( m_rImport, this, xAttrList,
                                                 0x0020, true );
             break;
-        case XML_TOK_PAGE_NUMBER:
+        case XML_ELEMENT(TEXT, XML_PAGE_NUMBER):
             m_sPageText += OUStringLiteral(s_sStringConcat) + " PageNumber()";
             m_bFormattedField = true;
             break;
-        case XML_TOK_PAGE_COUNT:
+        case XML_ELEMENT(TEXT, XML_PAGE_COUNT):
             m_sPageText += OUStringLiteral(s_sStringConcat) + " PageCount()";
             m_bFormattedField = true;
             break;
@@ -180,7 +163,7 @@ SvXMLImportContextRef OXMLFixedContent::CreateChildContext_(
     return xContext;
 }
 
-void OXMLFixedContent::EndElement()
+void OXMLFixedContent::endFastElement(sal_Int32 )
 {
     if ( m_pInP )
     {
@@ -210,7 +193,7 @@ void OXMLFixedContent::EndElement()
     }
 }
 
-void OXMLFixedContent::Characters( const OUString& rChars )
+void OXMLFixedContent::characters( const OUString& rChars )
 {
     m_sLabel += rChars;
     if ( !rChars.isEmpty() )
diff --git a/reportdesign/source/filter/xml/xmlFixedContent.hxx b/reportdesign/source/filter/xml/xmlFixedContent.hxx
index 18bd802cfd3f..c4e1520be9a9 100644
--- a/reportdesign/source/filter/xml/xmlFixedContent.hxx
+++ b/reportdesign/source/filter/xml/xmlFixedContent.hxx
@@ -36,16 +36,14 @@ namespace rptxml
         bool                m_bFormattedField;
 
     protected:
-        virtual SvXMLImportContextRef 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 > createFastChildContext_( sal_Int32 nElement,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override;
     private:
         OXMLFixedContent(const OXMLFixedContent&) = delete;
         OXMLFixedContent& operator =(const OXMLFixedContent&) = delete;
     public:
 
-        OXMLFixedContent( ORptFilter& rImport, sal_uInt16 nPrfx,
-                    const OUString& rLName
+        OXMLFixedContent( ORptFilter& rImport
                     ,OXMLCell& _rCell
                     ,OXMLTable* _pContainer
                     ,OXMLFixedContent* _pInP = nullptr);
@@ -53,9 +51,9 @@ namespace rptxml
 
         // This method is called for all characters that are contained in the
         // current element. The default is to ignore them.
-        virtual void Characters( const OUString& rChars ) override;
+        virtual void SAL_CALL characters( const OUString& rChars ) override;
 
-        virtual void EndElement() override;
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlFormatCondition.cxx b/reportdesign/source/filter/xml/xmlFormatCondition.cxx
index 676ee22896ae..580651197e9e 100644
--- a/reportdesign/source/filter/xml/xmlFormatCondition.cxx
+++ b/reportdesign/source/filter/xml/xmlFormatCondition.cxx
@@ -38,37 +38,32 @@ namespace rptxml
     using namespace ::com::sun::star::beans;
 
 OXMLFormatCondition::OXMLFormatCondition( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName,
-                const Reference< XAttributeList > & _xAttrList
+                const Reference< XFastAttributeList > & _xAttrList
                 ,const Reference< XFormatCondition > & _xComponent ) :
-    SvXMLImportContext( rImport, nPrfx, rLName )
+    SvXMLImportContext( rImport )
 ,m_rImport(rImport)
 ,m_xComponent(_xComponent)
 {
 
     OSL_ENSURE(m_xComponent.is(),"Component is NULL!");
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetFormatElemTokenMap();
     static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE);
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     try
     {
-        for(sal_Int16 i = 0; i < nLength; ++i)
+        sax_fastparser::FastAttributeList *pAttribList =
+                        sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+        for (auto &aIter : *pAttribList)
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            const OUString sValue = _xAttrList->getValueByIndex( i );
+            OUString sValue = aIter.toString();
 
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_ENABLED:
+                case XML_ELEMENT(REPORT, XML_ENABLED):
                     m_xComponent->setEnabled(sValue == s_sTRUE);
                     break;
-                case XML_TOK_FORMULA:
+                case XML_ELEMENT(REPORT, XML_FORMULA):
                     m_xComponent->setFormula(ORptFilter::convertFormula(sValue));
                     break;
-                case XML_TOK_FORMAT_STYLE_NAME:
+                case XML_ELEMENT(REPORT, XML_STYLE_NAME):
                     m_sStyleName = sValue;
                     break;
                 default:
@@ -87,7 +82,7 @@ OXMLFormatCondition::~OXMLFormatCondition()
 {
 }
 
-void OXMLFormatCondition::EndElement()
+void OXMLFormatCondition::endFastElement(sal_Int32 )
 {
     OXMLHelper::copyStyleElements(m_rImport.isOldFormat(),m_sStyleName,GetImport().GetAutoStyles(),m_xComponent.get());
 }
diff --git a/reportdesign/source/filter/xml/xmlFormatCondition.hxx b/reportdesign/source/filter/xml/xmlFormatCondition.hxx
index 2fb03360583c..56bd5602fb24 100644
--- a/reportdesign/source/filter/xml/xmlFormatCondition.hxx
+++ b/reportdesign/source/filter/xml/xmlFormatCondition.hxx
@@ -34,13 +34,12 @@ namespace rptxml
         void operator =(const OXMLFormatCondition&) = delete;
     public:
 
-        OXMLFormatCondition( ORptFilter& rImport, sal_uInt16 nPrfx,
-                    const OUString& rLName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+        OXMLFormatCondition( ORptFilter& rImport,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XFormatCondition >& _xComponent
                     );
         virtual ~OXMLFormatCondition() override;
-        virtual void EndElement() override;
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlFormattedField.cxx b/reportdesign/source/filter/xml/xmlFormattedField.cxx
index 0e268a99565d..b5a646722d23 100644
--- a/reportdesign/source/filter/xml/xmlFormattedField.cxx
+++ b/reportdesign/source/filter/xml/xmlFormattedField.cxx
@@ -34,34 +34,29 @@ namespace rptxml
     using namespace ::com::sun::star;
     using namespace xml::sax;
 
-OXMLFormattedField::OXMLFormattedField( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName
-                ,const uno::Reference< xml::sax::XAttributeList > & _xAttrList
+OXMLFormattedField::OXMLFormattedField( ORptFilter& rImport
+                ,const uno::Reference< xml::sax::XFastAttributeList > & _xAttrList
                 ,const uno::Reference< XFormattedField > & _xComponent
                 ,OXMLTable* _pContainer
                 ,bool _bPageCount) :
-    OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),_pContainer)
+    OXMLReportElementBase( rImport,_xComponent.get(),_pContainer)
 {
     OSL_ENSURE(m_xReportComponent.is(),"Component is NULL!");
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetControlElemTokenMap();
 
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     try
     {
-        for(sal_Int16 i = 0; i < nLength; ++i)
+        sax_fastparser::FastAttributeList *pAttribList =
+                        sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+        for (auto &aIter : *pAttribList)
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            const OUString sValue = _xAttrList->getValueByIndex( i );
+            OUString sValue = aIter.toString();
 
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_DATA_FORMULA:
+                case XML_ELEMENT(REPORT, XML_FORMULA):
                     _xComponent->setDataField(ORptFilter::convertFormula(sValue));
                     break;
-                case XML_TOK_SELECT_PAGE:
+                case XML_ELEMENT(REPORT, XML_SELECT_PAGE):
                     _xComponent->setDataField("rpt:PageNumber()");
                     break;
                 default:
diff --git a/reportdesign/source/filter/xml/xmlFormattedField.hxx b/reportdesign/source/filter/xml/xmlFormattedField.hxx
index 41a94a8204ee..b181810f267c 100644
--- a/reportdesign/source/filter/xml/xmlFormattedField.hxx
+++ b/reportdesign/source/filter/xml/xmlFormattedField.hxx
@@ -32,9 +32,7 @@ namespace rptxml
     public:
 
         OXMLFormattedField( ORptFilter& rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XFormattedField >& _xComponent
                     ,OXMLTable* _pContainer
                     ,bool _bPageCount);
diff --git a/reportdesign/source/filter/xml/xmlFunction.cxx b/reportdesign/source/filter/xml/xmlFunction.cxx
index f2a5850eef0f..8bda678e3c91 100644
--- a/reportdesign/source/filter/xml/xmlFunction.cxx
+++ b/reportdesign/source/filter/xml/xmlFunction.cxx
@@ -34,13 +34,11 @@ namespace rptxml
 
 
 OXMLFunction::OXMLFunction( ORptFilter& _rImport
-                ,sal_uInt16 nPrfx
-                ,const OUString& _sLocalName
-                ,const Reference< XAttributeList > & _xAttrList
+                ,const Reference< XFastAttributeList > & _xAttrList
                 ,const Reference< XFunctionsSupplier >& _xFunctions
                 ,bool _bAddToReport
                 ) :
-    SvXMLImportContext( _rImport, nPrfx, _sLocalName )
+    SvXMLImportContext( _rImport )
     ,m_xFunctions(_xFunctions->getFunctions())
     ,m_bAddToReport(_bAddToReport)
 {
@@ -48,38 +46,31 @@ OXMLFunction::OXMLFunction( ORptFilter& _rImport
     OSL_ENSURE(m_xFunctions.is(),"Functions is NULL!");
     m_xFunction = m_xFunctions->createFunction();
 
-    OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!");
-
-    const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = _rImport.GetFunctionElemTokenMap();
-
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE);
-    for(sal_Int16 i = 0; i < nLength; ++i)
+    sax_fastparser::FastAttributeList *pAttribList =
+                    sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+    for (auto &aIter : *pAttribList)
     {
-        OUString sLocalName;
-        const OUString sAttrName = _xAttrList->getNameByIndex( i );
-        const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-        const OUString sValue = _xAttrList->getValueByIndex( i );
+        OUString sValue = aIter.toString();
 
         try
         {
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_FUNCTION_NAME:
+                case XML_ELEMENT(REPORT, XML_NAME):
                     m_xFunction->setName(sValue);
                     break;
-                case XML_TOK_FUNCTION_FORMULA:
+                case XML_ELEMENT(REPORT, XML_FORMULA):
                     m_xFunction->setFormula(ORptFilter::convertFormula(sValue));
                     break;
-                case XML_TOK_PRE_EVALUATED:
+                case XML_ELEMENT(REPORT, XML_PRE_EVALUATED):
                     m_xFunction->setPreEvaluated(sValue == s_sTRUE);
                     break;
-                case XML_TOK_INITIAL_FORMULA:
+                case XML_ELEMENT(REPORT, XML_INITIAL_FORMULA):
                     if ( !sValue.isEmpty() )
                         m_xFunction->setInitialFormula(beans::Optional< OUString>(true,ORptFilter::convertFormula(sValue)));
                     break;
-                case XML_TOK_DEEP_TRAVERSING:
+                case XML_ELEMENT(REPORT, XML_DEEP_TRAVERSING):
                     m_xFunction->setDeepTraversing(sValue == s_sTRUE);
                     break;
                 default:
@@ -103,7 +94,7 @@ ORptFilter& OXMLFunction::GetOwnImport()
     return static_cast<ORptFilter&>(GetImport());
 }
 
-void OXMLFunction::EndElement()
+void OXMLFunction::endFastElement(sal_Int32 )
 {
     if ( m_bAddToReport )
     {
diff --git a/reportdesign/source/filter/xml/xmlFunction.hxx b/reportdesign/source/filter/xml/xmlFunction.hxx
index 1f1fe3e94d30..da3f6ac118b6 100644
--- a/reportdesign/source/filter/xml/xmlFunction.hxx
+++ b/reportdesign/source/filter/xml/xmlFunction.hxx
@@ -41,15 +41,13 @@ namespace rptxml
     public:
 
         OXMLFunction( ORptFilter& rImport
-                    , sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XFunctionsSupplier >&    _xFunctions
                     ,bool _bAddToReport = false
                     );
         virtual ~OXMLFunction() override;
 
-        virtual void EndElement() override;
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlGroup.cxx b/reportdesign/source/filter/xml/xmlGroup.cxx
index 69dfc393ed28..fdeb2b00f462 100644
--- a/reportdesign/source/filter/xml/xmlGroup.cxx
+++ b/reportdesign/source/filter/xml/xmlGroup.cxx
@@ -47,45 +47,37 @@ namespace rptxml
     }
 
 OXMLGroup::OXMLGroup( ORptFilter& _rImport
-                ,sal_uInt16 nPrfx
-                ,const OUString& _sLocalName
-                ,const Reference< XAttributeList > & _xAttrList
+                ,const Reference< XFastAttributeList > & _xAttrList
                 ) :
-    SvXMLImportContext( _rImport, nPrfx, _sLocalName )
+    SvXMLImportContext( _rImport )
 {
 
     m_xGroups = _rImport.getReportDefinition()->getGroups();
     OSL_ENSURE(m_xGroups.is(),"Groups is NULL!");
     m_xGroup = m_xGroups->createGroup();
 
-    OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!");
-
-    const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = _rImport.GetGroupElemTokenMap();
     m_xGroup->setSortAscending(false);// the default value has to be set
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE);
-    for(sal_Int16 i = 0; i < nLength; ++i)
+    sax_fastparser::FastAttributeList *pAttribList =
+                    sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+    for (auto &aIter : *pAttribList)
     {
-        OUString sLocalName;
-        const OUString sAttrName = _xAttrList->getNameByIndex( i );
-        const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-        OUString sValue = _xAttrList->getValueByIndex( i );
+        OUString sValue = aIter.toString();
 
         try
         {
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_START_NEW_COLUMN:
+                case XML_ELEMENT(REPORT, XML_START_NEW_COLUMN):
                     m_xGroup->setStartNewColumn(sValue == s_sTRUE);
                     break;
-                case XML_TOK_RESET_PAGE_NUMBER:
+                case XML_ELEMENT(REPORT, XML_RESET_PAGE_NUMBER):
                     m_xGroup->setResetPageNumber(sValue == s_sTRUE);
                     break;
-                case XML_TOK_SORT_ASCENDING:
+                case XML_ELEMENT(REPORT, XML_SORT_ASCENDING):
                     m_xGroup->setSortAscending(sValue == s_sTRUE);
                     break;
-                case XML_TOK_GROUP_EXPRESSION:
+                case XML_ELEMENT(REPORT, XML_GROUP_EXPRESSION):
                     {
                         sal_Int32 nLen = sValue.getLength();
                         if ( nLen )
@@ -164,7 +156,7 @@ OXMLGroup::OXMLGroup( ORptFilter& _rImport
                         }
                     }
                     break;
-                case XML_TOK_GROUP_KEEP_TOGETHER:
+                case XML_ELEMENT(REPORT, XML_KEEP_TOGETHER):
                     m_xGroup->setKeepTogether(lcl_getKeepTogetherOption(sValue));
                     break;
                 default:
@@ -184,54 +176,52 @@ OXMLGroup::~OXMLGroup()
 
 }
 
-SvXMLImportContextRef OXMLGroup::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLGroup::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
 {
-    SvXMLImportContext *pContext = nullptr;
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
     ORptFilter& rImport = GetOwnImport();
-    const SvXMLTokenMap&    rTokenMap   = rImport.GetGroupElemTokenMap();
 
-    switch( rTokenMap.Get( nPrefix, rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_GROUP_FUNCTION:
+        case XML_ELEMENT(REPORT, XML_FUNCTION):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                pContext = new OXMLFunction( rImport, nPrefix, rLocalName,xAttrList,m_xGroup.get());
+                xContext = new OXMLFunction( rImport,xAttrList,m_xGroup.get());
             }
             break;
-        case XML_TOK_GROUP_HEADER:
+        case XML_ELEMENT(REPORT, XML_GROUP_HEADER):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 m_xGroup->setHeaderOn(true);
-                pContext = new OXMLSection( rImport, nPrefix, rLocalName,xAttrList,m_xGroup->getHeader());
+                xContext = new OXMLSection( rImport,xAttrList,m_xGroup->getHeader());
             }
             break;
-        case XML_TOK_GROUP_GROUP:
+        case XML_ELEMENT(REPORT, XML_GROUP):
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLGroup( rImport, nPrefix, rLocalName,xAttrList);
+            xContext = new OXMLGroup( rImport,xAttrList);
             break;
-        case XML_TOK_GROUP_DETAIL:
+        case XML_ELEMENT(REPORT, XML_DETAIL):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 Reference<XReportDefinition> xComponent = rImport.getReportDefinition();
-                pContext = new OXMLSection( rImport, nPrefix, rLocalName,xAttrList, xComponent->getDetail());
+                xContext = new OXMLSection( rImport,xAttrList, xComponent->getDetail());
             }
             break;
 
-        case XML_TOK_GROUP_FOOTER:
+        case XML_ELEMENT(REPORT, XML_GROUP_FOOTER):
             {
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 m_xGroup->setFooterOn(true);
-                pContext = new OXMLSection( rImport, nPrefix, rLocalName,xAttrList,m_xGroup->getFooter());
+                xContext = new OXMLSection( rImport,xAttrList,m_xGroup->getFooter());
             }
             break;
         default:
             break;
     }
 
-    return pContext;
+    return xContext;
 }
 
 ORptFilter& OXMLGroup::GetOwnImport()
@@ -239,7 +229,7 @@ ORptFilter& OXMLGroup::GetOwnImport()
     return static_cast<ORptFilter&>(GetImport());
 }
 
-void OXMLGroup::EndElement()
+void OXMLGroup::endFastElement(sal_Int32 )
 {
     try
     {
diff --git a/reportdesign/source/filter/xml/xmlGroup.hxx b/reportdesign/source/filter/xml/xmlGroup.hxx
index ba1fc508dece..ea1b97602aaf 100644
--- a/reportdesign/source/filter/xml/xmlGroup.hxx
+++ b/reportdesign/source/filter/xml/xmlGroup.hxx
@@ -38,17 +38,14 @@ namespace rptxml
     public:
 
         OXMLGroup( ORptFilter& rImport
-                    , sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     );
         virtual ~OXMLGroup() override;
 
-        virtual SvXMLImportContextRef 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;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlImage.cxx b/reportdesign/source/filter/xml/xmlImage.cxx
index 0c4f8b2137fc..a0b559730e68 100644
--- a/reportdesign/source/filter/xml/xmlImage.cxx
+++ b/reportdesign/source/filter/xml/xmlImage.cxx
@@ -40,41 +40,36 @@ namespace rptxml
 
 
 OXMLImage::OXMLImage( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName,
-                const Reference< XAttributeList > & _xAttrList
+                const Reference< XFastAttributeList > & _xAttrList
                 ,const Reference< XImageControl > & _xComponent
                 ,OXMLTable* _pContainer) :
-    OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),_pContainer)
+    OXMLReportElementBase( rImport,_xComponent.get(),_pContainer)
 {
 
     OSL_ENSURE(m_xReportComponent.is(),"Component is NULL!");
-    const SvXMLNamespaceMap& rMap = m_rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = m_rImport.GetControlElemTokenMap();
     static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE);
 
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     try
     {
-        for(sal_Int16 i = 0; i < nLength; ++i)
+        sax_fastparser::FastAttributeList *pAttribList =
+                        sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+        for (auto &aIter : *pAttribList)
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            /* const */ OUString sValue = _xAttrList->getValueByIndex( i );
+            OUString sValue = aIter.toString();
 
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_IMAGE_DATA:
+                case XML_ELEMENT(FORM, XML_IMAGE_DATA):
                 {
                     SvtPathOptions aPathOptions;
                     sValue = aPathOptions.SubstituteVariable(sValue);
                     _xComponent->setImageURL(rImport.GetAbsoluteReference( sValue ));
                     break;
                 }
-                case XML_TOK_PRESERVE_IRI:
+                case XML_ELEMENT(REPORT, XML_PRESERVE_IRI):
                     _xComponent->setPreserveIRI(s_sTRUE == sValue);
                     break;
-                case XML_TOK_SCALE:
+                case XML_ELEMENT(REPORT, XML_SCALE):
                 {
                     sal_Int16 nRet = awt::ImageScaleMode::NONE;
                     if ( s_sTRUE == sValue )
@@ -90,7 +85,7 @@ OXMLImage::OXMLImage( ORptFilter& rImport,
                     _xComponent->setScaleMode( nRet );
                     break;
                 }
-                case XML_TOK_DATA_FORMULA:
+                case XML_ELEMENT(REPORT, XML_FORMULA):
                     _xComponent->setDataField(ORptFilter::convertFormula(sValue));
                     break;
                 default:
diff --git a/reportdesign/source/filter/xml/xmlImage.hxx b/reportdesign/source/filter/xml/xmlImage.hxx
index af90f820e727..32be8a8ac1c5 100644
--- a/reportdesign/source/filter/xml/xmlImage.hxx
+++ b/reportdesign/source/filter/xml/xmlImage.hxx
@@ -31,9 +31,8 @@ namespace rptxml
         void operator =(const OXMLImage&) = delete;
     public:
 
-        OXMLImage( ORptFilter& rImport, sal_uInt16 nPrfx,
-                    const OUString& rLName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+        OXMLImage( ORptFilter& rImport,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XImageControl >& _xComponent
                     ,OXMLTable* _pContainer);
         virtual ~OXMLImage() override;
diff --git a/reportdesign/source/filter/xml/xmlMasterFields.cxx b/reportdesign/source/filter/xml/xmlMasterFields.cxx
index 49df6b004de2..2816be32cbe2 100644
--- a/reportdesign/source/filter/xml/xmlMasterFields.cxx
+++ b/reportdesign/source/filter/xml/xmlMasterFields.cxx
@@ -33,32 +33,25 @@ namespace rptxml
     using namespace ::com::sun::star::xml::sax;
 
 OXMLMasterFields::OXMLMasterFields( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName,
-                const Reference< XAttributeList > & _xAttrList
+                const Reference< XFastAttributeList > & _xAttrList
                 ,IMasterDetailFieds* _pReport
                 ) :
-    SvXMLImportContext( rImport, nPrfx, rLName)
+    SvXMLImportContext( rImport )
 ,m_pReport(_pReport)
 {
-
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetSubDocumentElemTokenMap();
-
     OUString sMasterField,sDetailField;
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
-    for(sal_Int16 i = 0; i < nLength; ++i)
+    sax_fastparser::FastAttributeList *pAttribList =
+                    sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+    for (auto &aIter : *pAttribList)
     {
-        OUString sLocalName;
-        const OUString sAttrName = _xAttrList->getNameByIndex( i );
-        const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-        const OUString sValue = _xAttrList->getValueByIndex( i );
+        OUString sValue = aIter.toString();
 
-        switch( rTokenMap.Get( nPrefix, sLocalName ) )
+        switch( aIter.getToken() )
         {
-            case XML_TOK_MASTER:
+            case XML_ELEMENT(REPORT, XML_MASTER):
                 sMasterField = sValue;
                 break;
-            case XML_TOK_SUB_DETAIL:
+            case XML_ELEMENT(REPORT, XML_DETAIL):
                 sDetailField = sValue;
                 break;
             default:
@@ -76,27 +69,25 @@ OXMLMasterFields::~OXMLMasterFields()
 {
 }
 
-SvXMLImportContextRef OXMLMasterFields::CreateChildContext(
-        sal_uInt16 _nPrefix,
-        const OUString& _rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLMasterFields::createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
 {
-    SvXMLImportContext *pContext = nullptr;
-    const SvXMLTokenMap&    rTokenMap   = static_cast<ORptFilter&>(GetImport()).GetSubDocumentElemTokenMap();
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
 
-    switch( rTokenMap.Get( _nPrefix, _rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_MASTER_DETAIL_FIELD:
+        case XML_ELEMENT(REPORT, XML_MASTER_DETAIL_FIELD):
             {
                 GetImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                pContext = new OXMLMasterFields(static_cast<ORptFilter&>(GetImport()), _nPrefix, _rLocalName,xAttrList ,m_pReport);
+                xContext = new OXMLMasterFields(static_cast<ORptFilter&>(GetImport()),xAttrList ,m_pReport);
             }
             break;
         default:
             break;
     }
 
-    return pContext;
+    return xContext;
 }
 
 
diff --git a/reportdesign/source/filter/xml/xmlMasterFields.hxx b/reportdesign/source/filter/xml/xmlMasterFields.hxx
index 1e0d70eae156..e8e212827e60 100644
--- a/reportdesign/source/filter/xml/xmlMasterFields.hxx
+++ b/reportdesign/source/filter/xml/xmlMasterFields.hxx
@@ -31,16 +31,13 @@ namespace rptxml
         void operator =(const OXMLMasterFields&) = delete;
     public:
 
-        OXMLMasterFields( ORptFilter& rImport, sal_uInt16 nPrfx,
-                    const OUString& rLName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+        OXMLMasterFields( ORptFilter& rImport,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,IMasterDetailFieds* _pReport);
         virtual ~OXMLMasterFields() override;
 
-        virtual SvXMLImportContextRef 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;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlReport.cxx b/reportdesign/source/filter/xml/xmlReport.cxx
index 5b7a7bfaf740..96d08acb4f58 100644
--- a/reportdesign/source/filter/xml/xmlReport.cxx
+++ b/reportdesign/source/filter/xml/xmlReport.cxx
@@ -41,33 +41,27 @@ namespace rptxml
 
 
 OXMLReport::OXMLReport( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName,
-                const Reference< XAttributeList > & _xAttrList
+                const Reference< css::xml::sax::XFastAttributeList > & _xAttrList
                 ,const uno::Reference< report::XReportDefinition >& _xComponent) :
-    OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),nullptr)
+    OXMLReportElementBase( rImport, _xComponent.get(),nullptr)
     ,m_xReportDefinition(_xComponent)
 {
     OSL_ENSURE(m_xReportDefinition.is(),"No Report definition!");
 
     impl_initRuntimeDefaults();
 
-    const SvXMLNamespaceMap& rMap = m_rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = m_rImport.GetReportElemTokenMap();
-
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE);
     try
     {
-        for(sal_Int16 i = 0; i < nLength; ++i)
+        sax_fastparser::FastAttributeList *pAttribList =
+                        sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+        for (auto &aIter : *pAttribList)
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            const OUString sValue = _xAttrList->getValueByIndex( i );
+            OUString sValue = aIter.toString();
 
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_COMMAND_TYPE:
+                case XML_ELEMENT(REPORT, XML_COMMAND_TYPE):
                     {
                         sal_Int32 nRet = sdb::CommandType::COMMAND;
                         const SvXMLEnumMapEntry<sal_Int32>* aXML_EnumMap = OXMLHelper::GetCommandTypeOptions();
@@ -76,22 +70,22 @@ OXMLReport::OXMLReport( ORptFilter& rImport,
                         m_xReportDefinition->setCommandType(nRet);
                     }
                     break;
-                case XML_TOK_COMMAND:
+                case XML_ELEMENT(REPORT, XML_COMMAND):
                     m_xReportDefinition->setCommand(sValue);
                     break;
-                case XML_TOK_FILTER:
+                case XML_ELEMENT(REPORT, XML_FILTER):
                     m_xReportDefinition->setFilter(sValue);
                     break;
-                case XML_TOK_CAPTION:
+                case XML_ELEMENT(REPORT, XML_CAPTION):
                     m_xReportDefinition->setCaption(sValue);
                     break;
-                case XML_TOK_ESCAPE_PROCESSING:
+                case XML_ELEMENT(REPORT, XML_ESCAPE_PROCESSING):
                     m_xReportDefinition->setEscapeProcessing(sValue == s_sTRUE);
                     break;
-                case XML_TOK_REPORT_MIMETYPE:
+                case XML_ELEMENT(OFFICE, XML_MIMETYPE):
                     m_xReportDefinition->setMimeType(sValue);
                     break;
-                case XML_TOK_REPORT_NAME:
+                case XML_ELEMENT(DRAW, XML_NAME):
                     m_xReportDefinition->setName(sValue);
                     break;
                 default:
@@ -128,64 +122,62 @@ void OXMLReport::impl_initRuntimeDefaults() const
 }
 
 
-SvXMLImportContextRef OXMLReport::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReport::createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
 {
-    SvXMLImportContextRef xContext = CreateChildContext_(nPrefix,rLocalName,xAttrList);
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = createFastChildContext_(nElement,xAttrList);
     if (xContext)
         return xContext;
-    const SvXMLTokenMap&    rTokenMap   = m_rImport.GetReportElemTokenMap();
 
-    switch( rTokenMap.Get( nPrefix, rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_REPORT_FUNCTION:
+        case XML_ELEMENT(REPORT, XML_FUNCTION):
             {
                 m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                xContext = new OXMLFunction( m_rImport, nPrefix, rLocalName,xAttrList,m_xReportDefinition.get(),true);
+                xContext = new OXMLFunction( m_rImport,xAttrList,m_xReportDefinition.get(),true);
             }
             break;
-        case XML_TOK_MASTER_DETAIL_FIELDS:
+        case XML_ELEMENT(REPORT, XML_MASTER_DETAIL_FIELDS):
                 m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                xContext = new OXMLMasterFields(m_rImport, nPrefix, rLocalName,xAttrList ,this);
+                xContext = new OXMLMasterFields(m_rImport,xAttrList ,this);
             break;
-        case XML_TOK_REPORT_HEADER:
+        case XML_ELEMENT(REPORT, XML_REPORT_HEADER):
             {
                 m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 m_xReportDefinition->setReportHeaderOn(true);
-                xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getReportHeader());
+                xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getReportHeader());
             }
             break;
-        case XML_TOK_PAGE_HEADER:
+        case XML_ELEMENT(REPORT, XML_PAGE_HEADER):
             {
                 m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 m_xReportDefinition->setPageHeaderOn(true);
-                xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getPageHeader());
+                xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getPageHeader());
             }
             break;
-        case XML_TOK_GROUP:
+        case XML_ELEMENT(REPORT, XML_GROUP):
             m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            xContext = new OXMLGroup( m_rImport, nPrefix, rLocalName,xAttrList);
+            xContext = new OXMLGroup( m_rImport,xAttrList);
             break;
-        case XML_TOK_DETAIL:
+        case XML_ELEMENT(REPORT, XML_DETAIL):
             {
                 m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getDetail());
+                xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getDetail());
             }
             break;
-        case XML_TOK_PAGE_FOOTER:
+        case XML_ELEMENT(REPORT, XML_PAGE_FOOTER):
             {
                 m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 m_xReportDefinition->setPageFooterOn(true);
-                xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getPageFooter(),false);
+                xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getPageFooter(),false);
             }
             break;
-        case XML_TOK_REPORT_FOOTER:
+        case XML_ELEMENT(REPORT, XML_REPORT_FOOTER):
             {
                 m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
                 m_xReportDefinition->setReportFooterOn(true);
-                xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getReportFooter());
+                xContext = new OXMLSection( m_rImport, xAttrList, m_xReportDefinition->getReportFooter());
             }
             break;
         default:
@@ -195,7 +187,7 @@ SvXMLImportContextRef OXMLReport::CreateChildContext(
     return xContext;
 }
 
-void OXMLReport::EndElement()
+void OXMLReport::endFastElement(sal_Int32)
 {
     Reference< XFunctions > xFunctions = m_xReportDefinition->getFunctions();
     const ORptFilter::TGroupFunctionMap& aFunctions = m_rImport.getFunctions();
diff --git a/reportdesign/source/filter/xml/xmlReport.hxx b/reportdesign/source/filter/xml/xmlReport.hxx
index ba5702c0bdc6..e6d4627e3297 100644
--- a/reportdesign/source/filter/xml/xmlReport.hxx
+++ b/reportdesign/source/filter/xml/xmlReport.hxx
@@ -34,17 +34,17 @@ namespace rptxml
         void operator =(const OXMLReport&) = delete;
     public:
 
-        OXMLReport( ORptFilter& rImport, sal_uInt16 nPrfx,
-                    const OUString& rLName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+        OXMLReport( ORptFilter& rImport,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XReportDefinition >& _xComponent);
         virtual ~OXMLReport() override;
 
-        virtual SvXMLImportContextRef 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 startFastElement( sal_Int32 /*nElement*/,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {}
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
 
         virtual void addMasterDetailPair(const ::std::pair< OUString,OUString >& _aPair) override;
 
diff --git a/reportdesign/source/filter/xml/xmlReportElement.cxx b/reportdesign/source/filter/xml/xmlReportElement.cxx
index c01ae393dd56..f3740970b84a 100644
--- a/reportdesign/source/filter/xml/xmlReportElement.cxx
+++ b/reportdesign/source/filter/xml/xmlReportElement.cxx
@@ -36,34 +36,29 @@ namespace rptxml
     using namespace xml::sax;
 
 OXMLReportElement::OXMLReportElement( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName,
-                const Reference< XAttributeList > & _xAttrList
+                const Reference< XFastAttributeList > & _xAttrList
                 ,const Reference< XReportControlModel > & _xComponent) :
-    SvXMLImportContext( rImport, nPrfx, rLName )
+    SvXMLImportContext( rImport )
 ,m_xComponent(_xComponent)
 {
 
     OSL_ENSURE(m_xComponent.is(),"Component is NULL!");
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetReportElementElemTokenMap();
 
     static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE);
-    const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
     try
     {
-        for(sal_Int16 i = 0; i < nLength; ++i)
+        sax_fastparser::FastAttributeList *pAttribList =
+                        sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+        for (auto &aIter : *pAttribList)
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            const OUString sValue = _xAttrList->getValueByIndex( i );
+            OUString sValue = aIter.toString();
 
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-                case XML_TOK_PRINT_WHEN_GROUP_CHANGE:
+                case XML_ELEMENT(REPORT, XML_PRINT_WHEN_GROUP_CHANGE):
                     m_xComponent->setPrintWhenGroupChange(s_sTRUE == sValue);
                     break;
-                case XML_TOK_PRINT_REPEATED_VALUES:
+                case XML_ELEMENT(REPORT, XML_PRINT_REPEATED_VALUES):
                     m_xComponent->setPrintRepeatedValues(sValue == s_sTRUE);
                     break;
                 default:
@@ -82,38 +77,36 @@ OXMLReportElement::~OXMLReportElement()
 {
 }
 
-SvXMLImportContextRef OXMLReportElement::CreateChildContext(
-        sal_uInt16 _nPrefix,
-        const OUString& _rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReportElement::createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
 {
-    SvXMLImportContext *pContext = nullptr;
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
     ORptFilter& rImport = GetOwnImport();
-    const SvXMLTokenMap&    rTokenMap   = rImport.GetReportElementElemTokenMap();
 
-    switch( rTokenMap.Get( _nPrefix, _rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_COMPONENT:
+        case XML_ELEMENT(REPORT, XML_REPORT_COMPONENT):
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLComponent( rImport, _nPrefix, _rLocalName,xAttrList,m_xComponent.get());
+            xContext = new OXMLComponent( rImport,xAttrList,m_xComponent.get());
             break;
-        case XML_TOK_REP_CONDITIONAL_PRINT_EXPRESSION:
+        case XML_ELEMENT(REPORT, XML_CONDITIONAL_PRINT_EXPRESSION):
             rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLCondPrtExpr( rImport, _nPrefix, _rLocalName,xAttrList,m_xComponent.get());
+            xContext = new OXMLCondPrtExpr( rImport,xAttrList,m_xComponent.get());
             break;
-        case XML_TOK_FORMATCONDITION:
+        case XML_ELEMENT(REPORT, XML_FORMAT_CONDITION):
             {
                 uno::Reference< report::XFormatCondition > xNewCond = m_xComponent->createFormatCondition();
                 m_xComponent->insertByIndex(m_xComponent->getCount(),uno::makeAny(xNewCond));
                 rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                pContext = new OXMLFormatCondition( rImport, _nPrefix, _rLocalName,xAttrList,xNewCond);
+                xContext = new OXMLFormatCondition( rImport,xAttrList,xNewCond);
             }
             break;
         default:
             break;
     }
 
-    return pContext;
+    return xContext;
 }
 
 ORptFilter& OXMLReportElement::GetOwnImport()
diff --git a/reportdesign/source/filter/xml/xmlReportElement.hxx b/reportdesign/source/filter/xml/xmlReportElement.hxx
index a5d11ac73605..5f64dbe732e8 100644
--- a/reportdesign/source/filter/xml/xmlReportElement.hxx
+++ b/reportdesign/source/filter/xml/xmlReportElement.hxx
@@ -33,15 +33,13 @@ namespace rptxml
         void operator =(const OXMLReportElement&) = delete;
     public:
 
-        OXMLReportElement( ORptFilter& rImport, sal_uInt16 nPrfx,
-                    const OUString& rLName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+        OXMLReportElement( ORptFilter& rImport,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XReportControlModel >& _xComponent);
         virtual ~OXMLReportElement() override;
 
-        virtual SvXMLImportContextRef 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;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlReportElementBase.cxx b/reportdesign/source/filter/xml/xmlReportElementBase.cxx
index 0963b2732439..122395abc6a5 100644
--- a/reportdesign/source/filter/xml/xmlReportElementBase.cxx
+++ b/reportdesign/source/filter/xml/xmlReportElementBase.cxx
@@ -17,6 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 #include <xmloff/ProgressBarHelper.hxx>
+#include <xmloff/xmlnmspe.hxx>
 #include "xmlReportElementBase.hxx"
 #include "xmlfilter.hxx"
 #include "xmlControlProperty.hxx"
@@ -32,11 +33,9 @@ namespace rptxml
     using namespace ::com::sun::star::xml::sax;
 
 OXMLReportElementBase::OXMLReportElementBase( ORptFilter& rImport
-                ,sal_uInt16 nPrfx
-                , const OUString& rLName
                 ,const Reference< XReportComponent > & _xComponent
                 ,OXMLTable* _pContainer) :
-    SvXMLImportContext( rImport, nPrfx, rLName )
+    SvXMLImportContext( rImport )
 ,m_rImport(rImport)
 ,m_pContainer(_pContainer)
 ,m_xReportComponent(_xComponent)
@@ -48,47 +47,44 @@ OXMLReportElementBase::~OXMLReportElementBase()
 {
 }
 
-SvXMLImportContextRef OXMLReportElementBase::CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReportElementBase::createFastChildContext(
+        sal_Int32 nElement,
+        const Reference< XFastAttributeList > & xAttrList )
 {
-    SvXMLImportContextRef xContext = CreateChildContext_(nPrefix,rLocalName,xAttrList);
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = createFastChildContext_(nElement,xAttrList);
     return xContext;
 }
 
-SvXMLImportContextRef OXMLReportElementBase::CreateChildContext_(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReportElementBase::createFastChildContext_(
+        sal_Int32 nElement,
+        const Reference< XFastAttributeList > & xAttrList )
 {
-    SvXMLImportContext *pContext = nullptr;
-    const SvXMLTokenMap&    rTokenMap   = m_rImport.GetControlElemTokenMap();
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
 
-    switch( rTokenMap.Get( nPrefix, rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_REPORT_ELEMENT:
+        case XML_ELEMENT(REPORT, XML_REPORT_ELEMENT):
             {
                 uno::Reference<report::XReportControlModel> xReportModel(m_xReportComponent,uno::UNO_QUERY);
                 if ( xReportModel.is() )
                 {
                     m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                    pContext = new OXMLReportElement( m_rImport, nPrefix, rLocalName,xAttrList,xReportModel);
+                    xContext = new OXMLReportElement( m_rImport,xAttrList,xReportModel);
                 }
             }
             break;
-        case XML_TOK_PROPERTIES:
+        case XML_ELEMENT(FORM, XML_PROPERTIES):
             m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-            pContext = new OXMLControlProperty( m_rImport, nPrefix, rLocalName,xAttrList,m_xReportComponent.get());
+            xContext = new OXMLControlProperty( m_rImport,xAttrList,m_xReportComponent.get());
             break;
         default:
             break;
     }
 
-    return pContext;
+    return xContext;
 }
 
-void OXMLReportElementBase::EndElement()
+void OXMLReportElementBase::endFastElement(sal_Int32 )
 {
     try
     {
diff --git a/reportdesign/source/filter/xml/xmlReportElementBase.hxx b/reportdesign/source/filter/xml/xmlReportElementBase.hxx
index b8fc8361c9b1..ab60557e0b2a 100644
--- a/reportdesign/source/filter/xml/xmlReportElementBase.hxx
+++ b/reportdesign/source/filter/xml/xmlReportElementBase.hxx
@@ -46,23 +46,22 @@ namespace rptxml
         OXMLTable*    m_pContainer;
         css::uno::Reference< css::report::XReportComponent >      m_xReportComponent;
 
-        virtual SvXMLImportContextRef CreateChildContext_( sal_uInt16 nPrefix,
-                    const OUString& rLocalName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList );
+        virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext_( sal_Int32 nElement,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList );
     public:
 
         OXMLReportElementBase( ORptFilter& rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
                     ,const css::uno::Reference< css::report::XReportComponent >& _xComponent
                     ,OXMLTable* _pContainer);
         virtual ~OXMLReportElementBase() override;
 
-        virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-                    const OUString& rLocalName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override;
+        virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) 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;
+
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlSection.cxx b/reportdesign/source/filter/xml/xmlSection.cxx
index 0c5a647f8662..07646370ea29 100644
--- a/reportdesign/source/filter/xml/xmlSection.cxx
+++ b/reportdesign/source/filter/xml/xmlSection.cxx
@@ -50,39 +50,33 @@ namespace rptxml
 
 
 OXMLSection::OXMLSection( ORptFilter& rImport,
-                sal_uInt16 nPrfx, const OUString& _sLocalName,
-                const uno::Reference< xml::sax::XAttributeList > & _xAttrList
+                const uno::Reference< xml::sax::XFastAttributeList > & _xAttrList
                 ,const uno::Reference< report::XSection >& _xSection
                 ,bool _bPageHeader)
-:SvXMLImportContext( rImport, nPrfx, _sLocalName )
+:SvXMLImportContext( rImport )
 ,m_xSection(_xSection)
 {
 
-    OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!");
-    const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap();
-    const SvXMLTokenMap& rTokenMap = rImport.GetSectionElemTokenMap();
-
-    const sal_Int16 nLength = (m_xSection.is() && _xAttrList.is()) ? _xAttrList->getLength() : 0;
+    if (!m_xSection.is())
+        return;
     static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE);
     try
     {
-        for(sal_Int16 i = 0; i < nLength; ++i)
+        sax_fastparser::FastAttributeList *pAttribList =
+                        sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList );
+        for (auto &aIter : *pAttribList)
         {
-            OUString sLocalName;
-            const OUString sAttrName = _xAttrList->getNameByIndex( i );
-            const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName );
-            const OUString sValue = _xAttrList->getValueByIndex( i );
+            OUString sValue = aIter.toString();
 
-            switch( rTokenMap.Get( nPrefix, sLocalName ) )
+            switch( aIter.getToken() )
             {
-
-                case XML_TOK_PAGE_PRINT_OPTION:
+                case XML_ELEMENT(REPORT, XML_PAGE_PRINT_OPTION):
                     if ( _bPageHeader )
                         m_xSection->getReportDefinition()->setPageHeaderOption(lcl_getReportPrintOption(sValue));
                     else
                         m_xSection->getReportDefinition()->setPageFooterOption(lcl_getReportPrintOption(sValue));
                     break;
-                case XML_TOK_REPEAT_SECTION:
+                case XML_ELEMENT(REPORT, XML_REPEAT_SECTION):
                     m_xSection->setRepeatSection(sValue == s_sTRUE );
                     break;
 
@@ -101,25 +95,23 @@ OXMLSection::~OXMLSection()
 {
 }
 
-SvXMLImportContextRef OXMLSection::CreateChildContext(
-        sal_uInt16 _nPrefix,
-        const OUString& _rLocalName,
-        const uno::Reference< xml::sax::XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLSection::createFastChildContext(
+        sal_Int32 nElement,
+        const Reference< XFastAttributeList > & xAttrList )
 {
-    SvXMLImportContext *pContext = nullptr;
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext;
     ORptFilter& rImport = GetOwnImport();
-    const SvXMLTokenMap&    rTokenMap   = rImport.GetSectionElemTokenMap();
 
-    switch( rTokenMap.Get( _nPrefix, _rLocalName ) )
+    switch( nElement )
     {
-        case XML_TOK_TABLE:
-            pContext = new OXMLTable( rImport, _nPrefix, _rLocalName, xAttrList, m_xSection);
+        case XML_ELEMENT(TABLE, XML_TABLE):
+            xContext = new OXMLTable( rImport, xAttrList, m_xSection);
             break;
         default:
             break;
     }
 
-    return pContext;
+    return xContext;
 }
 
 ORptFilter& OXMLSection::GetOwnImport()
diff --git a/reportdesign/source/filter/xml/xmlSection.hxx b/reportdesign/source/filter/xml/xmlSection.hxx
index b677d3cb5cfb..26e8517232ff 100644
--- a/reportdesign/source/filter/xml/xmlSection.hxx
+++ b/reportdesign/source/filter/xml/xmlSection.hxx
@@ -37,16 +37,13 @@ namespace rptxml
     public:
 
         OXMLSection( ORptFilter& rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
-                    ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList
+                    ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList
                     ,const css::uno::Reference< css::report::XSection >& _xSection
                     ,bool _bPageHeader = true);
         virtual ~OXMLSection() override;
 
-        virtual SvXMLImportContextRef 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;
     };
 
 } // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlSubDocument.cxx b/reportdesign/source/filter/xml/xmlSubDocument.cxx
index ff97c749656b..7b09d5a1b6b7 100644
--- a/reportdesign/source/filter/xml/xmlSubDocument.cxx
+++ b/reportdesign/source/filter/xml/xmlSubDocument.cxx
@@ -36,13 +36,11 @@ namespace rptxml
     using namespace ::com::sun::star::uno;
     using namespace ::com::sun::star::xml::sax;
 
-OXMLSubDocument::OXMLSubDocument( ORptFilter& rImport,
-                sal_uInt16 nPrfx
-                ,const OUString& rLName
+OXMLSubDocument::OXMLSubDocument( ORptFilter& rImport
                 ,const Reference< XReportComponent > & _xComponent
                 ,OXMLTable* _pContainer
                 ,OXMLCell* _pCellParent) :
-    OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),_pContainer)
+    OXMLReportElementBase( rImport,_xComponent.get(),_pContainer)
 ,m_xFake(_xComponent)
 ,m_pCellParent(_pCellParent)
 ,m_nCurrentCount(0)
@@ -55,31 +53,21 @@ OXMLSubDocument::~OXMLSubDocument()
 {
 }
 
-SvXMLImportContextRef OXMLSubDocument::CreateChildContext_(
-        sal_uInt16 _nPrefix,
-        const OUString& _rLocalName,
-        const Reference< XAttributeList > & xAttrList )
+SvXMLImportContextRef OXMLSubDocument::CreateChildContext( sal_uInt16 nPrefix,
+                    const OUString& rLocalName,
+                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList )
 {
-    SvXMLImportContextRef xContext = OXMLReportElementBase::CreateChildContext_(_nPrefix,_rLocalName,xAttrList);
-    if (xContext)
-        return xContext;
+    SvXMLImportContextRef xContext;
     const SvXMLTokenMap&    rTokenMap   = static_cast<ORptFilter&>(GetImport()).GetReportElemTokenMap();
-
-    switch( rTokenMap.Get( _nPrefix, _rLocalName ) )
+    switch( rTokenMap.Get( nPrefix, rLocalName ) )
     {
-        case XML_TOK_MASTER_DETAIL_FIELDS:
-            {
-                GetImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
-                xContext = new OXMLMasterFields(static_cast<ORptFilter&>(GetImport()), _nPrefix, _rLocalName,xAttrList ,this);
-            }
-            break;
         case XML_TOK_SUB_FRAME:
             {
                 if ( !m_bContainsShape )
                     m_nCurrentCount = m_pContainer->getSection()->getCount();
                 rtl::Reference< XMLShapeImportHelper > xShapeImportHelper = GetImport().GetShapeImport();
                 uno::Reference< drawing::XShapes > xShapes = m_pContainer->getSection().get();
-                xContext = xShapeImportHelper->CreateGroupChildContext(GetImport(),_nPrefix,_rLocalName,xAttrList,xShapes);
+                xContext = xShapeImportHelper->CreateGroupChildContext(GetImport(),nPrefix,rLocalName,xAttrList,xShapes);
                 m_bContainsShape = true;
                 if (m_pCellParent)
                 {
@@ -88,11 +76,31 @@ SvXMLImportContextRef OXMLSubDocument::CreateChildContext_(
                 }
             }
             break;
+    }
+    return xContext;
+}
+
+css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLSubDocument::createFastChildContext_(
+        sal_Int32 nElement,
+        const Reference< XFastAttributeList > & xAttrList )
+{
+    css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = OXMLReportElementBase::createFastChildContext_(nElement,xAttrList);
+    if (xContext)
+        return xContext;
+
+    switch( nElement )
+    {
+        case XML_ELEMENT(REPORT, XML_MASTER_DETAIL_FIELDS):
+            {
+                GetImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
+                xContext = new OXMLMasterFields(static_cast<ORptFilter&>(GetImport()),xAttrList ,this);
+            }
+            break;
         // FIXME: is it *intentional* that this is supported?
         // ORptExport::exportContainer() can export this but the import
         // used to be rather accidental previously
-        case XML_TOK_SUB_BODY:
-            xContext = new RptXMLDocumentBodyContext(GetImport(), _nPrefix, _rLocalName);
+        case XML_ELEMENT(OFFICE, XML_BODY):
+            xContext = new RptXMLDocumentBodyContext(GetImport());
             break;
         default:
             break;
@@ -101,7 +109,7 @@ SvXMLImportContextRef OXMLSubDocument::CreateChildContext_(
     return xContext;
 }
 
-void OXMLSubDocument::EndElement()
+void OXMLSubDocument::endFastElement(sal_Int32 )
 {
     if ( m_bContainsShape )
     {
diff --git a/reportdesign/source/filter/xml/xmlSubDocument.hxx b/reportdesign/source/filter/xml/xmlSubDocument.hxx
index 3c0a0d33c6d4..38a4007ea5f8 100644
--- a/reportdesign/source/filter/xml/xmlSubDocument.hxx
+++ b/reportdesign/source/filter/xml/xmlSubDocument.hxx
@@ -39,20 +39,21 @@ namespace rptxml
         OXMLSubDocument(const OXMLSubDocument&) = delete;
         void operator =(const OXMLSubDocument&) = delete;
 
-        virtual SvXMLImportContextRef 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 > createFastChildContext_( sal_Int32 nElement,
+                    const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override;
     public:
 
         OXMLSubDocument( ORptFilter& rImport
-                    ,sal_uInt16 nPrfx
-                    ,const OUString& rLName
                     ,const css::uno::Reference< css::report::XReportComponent >& _xComponent
                     ,OXMLTable* _pContainer
                     ,OXMLCell* _pCellParent);
         virtual ~OXMLSubDocument() override;
 
-        virtual void EndElement() override;
+        virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
+                    const OUString& rLocalName,
+                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override;
+
+        virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
         virtual void addMasterDetailPair(const ::std::pair< OUString,OUString >& _aPair) override;
     };
 
diff --git a/reportdesign/source/filter/xml/xmlTable.cxx b/reportdesign/source/filter/xml/xmlTable.cxx
index 7bf8e57123d2..5c400a33512d 100644

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list