diff --git a/xfa/fxfa/parser/cxfa_xml_parser.cpp b/xfa/fxfa/parser/cxfa_xml_parser.cpp
index b202022..ebde399 100644
--- a/xfa/fxfa/parser/cxfa_xml_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_xml_parser.cpp
@@ -6,28 +6,22 @@
 
 #include "xfa/fxfa/parser/cxfa_xml_parser.h"
 
-CXFA_XMLParser::CXFA_XMLParser(CFDE_XMLNode* pRoot,
+CXFA_XMLParser::CXFA_XMLParser(CFDE_XMLNode* pParent,
                                const CFX_RetainPtr<IFGAS_Stream>& pStream)
     : m_nElementStart(0),
       m_dwCheckStatus(0),
       m_dwCurrentCheckStatus(0),
-      m_pRoot(pRoot),
       m_pStream(pStream),
       m_pParser(new CFDE_XMLSyntaxParser),
-      m_pParent(pRoot),
+      m_pParent(pParent),
       m_pChild(nullptr),
-      m_NodeStack(16),
       m_syntaxParserResult(FDE_XmlSyntaxResult::None) {
   ASSERT(m_pParent && m_pStream);
-  m_NodeStack.Push(m_pParent);
+  m_NodeStack.push(m_pParent);
   m_pParser->Init(m_pStream, 32 * 1024, 1024 * 1024);
 }
 
-CXFA_XMLParser::~CXFA_XMLParser() {
-  m_NodeStack.RemoveAll(false);
-  m_ws1.clear();
-  m_ws2.clear();
-}
+CXFA_XMLParser::~CXFA_XMLParser() {}
 
 int32_t CXFA_XMLParser::DoParser(IFX_Pause* pPause) {
   if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error)
@@ -51,9 +45,8 @@
         m_pChild = m_pParent;
         break;
       case FDE_XmlSyntaxResult::ElementOpen:
-        if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 2) {
+        if (m_dwCheckStatus != 0x03 && m_NodeStack.size() == 2)
           m_nElementStart = m_pParser->GetCurrentPos() - 1;
-        }
         break;
       case FDE_XmlSyntaxResult::ElementBreak:
         break;
@@ -68,18 +61,18 @@
           m_syntaxParserResult = FDE_XmlSyntaxResult::Error;
           break;
         }
-        m_NodeStack.Pop();
-        if (m_NodeStack.GetSize() < 1) {
+        if (!m_NodeStack.empty())
+          m_NodeStack.pop();
+        if (m_NodeStack.empty()) {
           m_syntaxParserResult = FDE_XmlSyntaxResult::Error;
           break;
-        } else if (m_dwCurrentCheckStatus != 0 && m_NodeStack.GetSize() == 2) {
+        } else if (m_dwCurrentCheckStatus != 0 && m_NodeStack.size() == 2) {
           m_nSize[m_dwCurrentCheckStatus - 1] =
               m_pParser->GetCurrentBinaryPos() -
               m_nStart[m_dwCurrentCheckStatus - 1];
           m_dwCurrentCheckStatus = 0;
         }
-
-        m_pParent = static_cast<CFDE_XMLNode*>(*m_NodeStack.GetTopElement());
+        m_pParent = m_NodeStack.top();
         m_pChild = m_pParent;
         iCount++;
         break;
@@ -97,10 +90,10 @@
         m_pParser->GetTagName(m_ws1);
         m_pChild = new CFDE_XMLElement(m_ws1);
         m_pParent->InsertChildNode(m_pChild);
-        m_NodeStack.Push(m_pChild);
+        m_NodeStack.push(m_pChild);
         m_pParent = m_pChild;
 
-        if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 3) {
+        if (m_dwCheckStatus != 0x03 && m_NodeStack.size() == 3) {
           CFX_WideString wsTag;
           static_cast<CFDE_XMLElement*>(m_pChild)->GetLocalTagName(wsTag);
           if (wsTag == L"template") {
@@ -166,7 +159,7 @@
     }
   }
   return (m_syntaxParserResult == FDE_XmlSyntaxResult::Error ||
-          m_NodeStack.GetSize() != 1)
+          m_NodeStack.size() != 1)
              ? -1
              : m_pParser->GetStatus();
 }
diff --git a/xfa/fxfa/parser/cxfa_xml_parser.h b/xfa/fxfa/parser/cxfa_xml_parser.h
index 9393b7e..a631df0 100644
--- a/xfa/fxfa/parser/cxfa_xml_parser.h
+++ b/xfa/fxfa/parser/cxfa_xml_parser.h
@@ -8,6 +8,7 @@
 #define XFA_FXFA_PARSER_CXFA_XML_PARSER_H_
 
 #include <memory>
+#include <stack>
 
 #include "xfa/fde/xml/fde_xml_imp.h"
 
@@ -16,7 +17,7 @@
 
 class CXFA_XMLParser : public IFDE_XMLParser {
  public:
-  CXFA_XMLParser(CFDE_XMLNode* pRoot,
+  CXFA_XMLParser(CFDE_XMLNode* pParent,
                  const CFX_RetainPtr<IFGAS_Stream>& pStream);
   ~CXFA_XMLParser() override;
 
@@ -29,13 +30,12 @@
   uint16_t m_dwCheckStatus;
   uint16_t m_dwCurrentCheckStatus;
 
- protected:
-  CFDE_XMLNode* m_pRoot;
+ private:
   CFX_RetainPtr<IFGAS_Stream> m_pStream;
   std::unique_ptr<CFDE_XMLSyntaxParser> m_pParser;
   CFDE_XMLNode* m_pParent;
   CFDE_XMLNode* m_pChild;
-  CFX_StackTemplate<CFDE_XMLNode*> m_NodeStack;
+  std::stack<CFDE_XMLNode*> m_NodeStack;
   CFX_WideString m_ws1;
   CFX_WideString m_ws2;
   FDE_XmlSyntaxResult m_syntaxParserResult;
