Commit 40209b6d authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander Trofimov

ошибка при чтении через sax xml вида <node attribute=""></node>, изменения для...

ошибка при чтении через sax xml вида <node attribute=""></node>, изменения для сборки pptxFile c _USE_LIBXML2_READER_

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@58127 954022d7-b5bf-4e40-9824-e11837661b57
parent 7f623c1b
...@@ -2105,7 +2105,7 @@ void CAVSOfficeDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem& oElem, ...@@ -2105,7 +2105,7 @@ void CAVSOfficeDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem& oElem,
PPTX::Logic::BlipFill* pBlipFill = new PPTX::Logic::BlipFill(); PPTX::Logic::BlipFill* pBlipFill = new PPTX::Logic::BlipFill();
pBlipFill->m_namespace = _T("a"); pBlipFill->m_namespace = _T("a");
pBlipFill->blip = new PPTX::Logic::Blip(); pBlipFill->blip = new PPTX::Logic::Blip();
pBlipFill->blip->embed = *sRid; pBlipFill->blip->embed = new OOX::RId(*sRid);
if (sType.is_init() && ((*sType == _T("tile")) || (*sType == _T("pattern")))) if (sType.is_init() && ((*sType == _T("tile")) || (*sType == _T("pattern"))))
{ {
...@@ -2161,7 +2161,7 @@ void CAVSOfficeDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem& oElem, ...@@ -2161,7 +2161,7 @@ void CAVSOfficeDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem& oElem,
PPTX::Logic::BlipFill* pBlipFill = new PPTX::Logic::BlipFill(); PPTX::Logic::BlipFill* pBlipFill = new PPTX::Logic::BlipFill();
pBlipFill->m_namespace = _T("a"); pBlipFill->m_namespace = _T("a");
pBlipFill->blip = new PPTX::Logic::Blip(); pBlipFill->blip = new PPTX::Logic::Blip();
pBlipFill->blip->embed = *sRid; pBlipFill->blip->embed = new OOX::RId(*sRid);
if (sType.is_init() && *sType == _T("tile")) if (sType.is_init() && *sType == _T("tile"))
{ {
......
...@@ -93,12 +93,9 @@ namespace PPTX ...@@ -93,12 +93,9 @@ namespace PPTX
oNode.ReadAttributeBase(L"id", id); oNode.ReadAttributeBase(L"id", id);
BSTR bsMem = oNode.ReadAttributeBase(L"spid"); CString bsMem = oNode.ReadAttributeBase(L"spid");
if (NULL != bsMem) if (!bsMem.IsEmpty())
{
id = bsMem; id = bsMem;
SysFreeString(bsMem);
}
if (id.IsInit()) if (id.IsInit())
{ {
......
...@@ -119,6 +119,7 @@ namespace NSCommon ...@@ -119,6 +119,7 @@ namespace NSCommon
this->m_pPointer = new Type( cwsValue ); this->m_pPointer = new Type( cwsValue );
return *this; return *this;
} }
#ifdef _WIN32
nullable<Type>& operator=(const BSTR &value) nullable<Type>& operator=(const BSTR &value)
{ {
RELEASEOBJECT(this->m_pPointer); RELEASEOBJECT(this->m_pPointer);
...@@ -126,7 +127,7 @@ namespace NSCommon ...@@ -126,7 +127,7 @@ namespace NSCommon
this->m_pPointer = new Type( value ); this->m_pPointer = new Type( value );
return *this; return *this;
} }
#endif
nullable<Type>& operator=(const nullable<Type> &oOther) nullable<Type>& operator=(const nullable<Type> &oOther)
{ {
RELEASEOBJECT(this->m_pPointer); RELEASEOBJECT(this->m_pPointer);
...@@ -319,6 +320,15 @@ namespace NSCommon ...@@ -319,6 +320,15 @@ namespace NSCommon
*m_pPointer = 0; *m_pPointer = 0;
} }
} }
nullable_int& operator=(const wchar_t* cwsValue)
{
RELEASEOBJECT(m_pPointer);
if ( NULL != cwsValue )
m_pPointer = new int(XmlUtils::GetInteger(cwsValue));
return *this;
}
#ifdef _WIN32 #ifdef _WIN32
AVSINLINE void operator=(const BSTR& value) AVSINLINE void operator=(const BSTR& value)
{ {
...@@ -391,13 +401,23 @@ namespace NSCommon ...@@ -391,13 +401,23 @@ namespace NSCommon
*m_pPointer = max; *m_pPointer = max;
} }
} }
nullable_sizet& operator=(const wchar_t* cwsValue)
{
RELEASEOBJECT(m_pPointer);
if ( NULL != cwsValue )
m_pPointer = new size_t(XmlUtils::GetUInteger(cwsValue));
return *this;
}
#ifdef _WIN32
AVSINLINE void operator=(const BSTR& value) AVSINLINE void operator=(const BSTR& value)
{ {
RELEASEOBJECT(m_pPointer); RELEASEOBJECT(m_pPointer);
if (NULL != value) if (NULL != value)
m_pPointer = new size_t(XmlUtils::GetUInteger(value)); m_pPointer = new size_t(XmlUtils::GetUInteger(value));
} }
#endif
AVSINLINE void operator=(const size_t& value) AVSINLINE void operator=(const size_t& value)
{ {
RELEASEOBJECT(m_pPointer); RELEASEOBJECT(m_pPointer);
...@@ -449,13 +469,23 @@ namespace NSCommon ...@@ -449,13 +469,23 @@ namespace NSCommon
*m_pPointer = max; *m_pPointer = max;
} }
} }
nullable_double& operator=(const wchar_t* cwsValue)
{
RELEASEOBJECT(m_pPointer);
if ( NULL != cwsValue )
m_pPointer = new double(XmlUtils::GetDouble(cwsValue));
return *this;
}
#ifdef _WIN32
AVSINLINE void operator=(const BSTR& value) AVSINLINE void operator=(const BSTR& value)
{ {
RELEASEOBJECT(m_pPointer); RELEASEOBJECT(m_pPointer);
if (NULL != value) if (NULL != value)
m_pPointer = new double(XmlUtils::GetDouble(value)); m_pPointer = new double(XmlUtils::GetDouble(value));
} }
#endif
AVSINLINE void operator=(const double& value) AVSINLINE void operator=(const double& value)
{ {
RELEASEOBJECT(m_pPointer); RELEASEOBJECT(m_pPointer);
...@@ -505,13 +535,23 @@ namespace NSCommon ...@@ -505,13 +535,23 @@ namespace NSCommon
return false; return false;
} }
public: public:
nullable_bool& operator=(const wchar_t* cwsValue)
{
RELEASEOBJECT(m_pPointer);
if ( NULL != cwsValue )
m_pPointer = new bool(XmlUtils::GetBoolean2(cwsValue));
return *this;
}
#ifdef _WIN32
AVSINLINE void operator=(const BSTR& value) AVSINLINE void operator=(const BSTR& value)
{ {
RELEASEOBJECT(m_pPointer); RELEASEOBJECT(m_pPointer);
if (NULL != value) if (NULL != value)
m_pPointer = new bool(set((CString)value)); m_pPointer = new bool(set((CString)value));
} }
#endif
AVSINLINE void operator=(const bool& value) AVSINLINE void operator=(const bool& value)
{ {
RELEASEOBJECT(m_pPointer); RELEASEOBJECT(m_pPointer);
......
...@@ -33,8 +33,8 @@ namespace OOX ...@@ -33,8 +33,8 @@ namespace OOX
{ {
ReadAttributes( oReader ); ReadAttributes( oReader );
if ( oReader.IsEmptyNode() ) if ( !oReader.IsEmptyNode() )
return; oReader.ReadTillEnd();
} }
virtual CString toXML() const virtual CString toXML() const
{ {
......
...@@ -31,10 +31,10 @@ namespace ComplexTypes ...@@ -31,10 +31,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -49,6 +49,15 @@ namespace ComplexTypes ...@@ -49,6 +49,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -76,11 +85,10 @@ namespace ComplexTypes ...@@ -76,11 +85,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:type"), m_oType ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:val"), m_oVal ) oReader.ReadTillEnd();
WritingElement_ReadAttributes_End( oReader )
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -102,6 +110,16 @@ namespace ComplexTypes ...@@ -102,6 +110,16 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:type"), m_oType )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -129,10 +147,10 @@ namespace ComplexTypes ...@@ -129,10 +147,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -147,6 +165,15 @@ namespace ComplexTypes ...@@ -147,6 +165,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -174,11 +201,10 @@ namespace ComplexTypes ...@@ -174,11 +201,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:type"), m_oType ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:val"), m_oVal ) oReader.ReadTillEnd();
WritingElement_ReadAttributes_End( oReader )
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -200,6 +226,16 @@ namespace ComplexTypes ...@@ -200,6 +226,16 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:type"), m_oType )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -227,10 +263,10 @@ namespace ComplexTypes ...@@ -227,10 +263,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -245,6 +281,15 @@ namespace ComplexTypes ...@@ -245,6 +281,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
......
...@@ -30,11 +30,10 @@ namespace ComplexTypes ...@@ -30,11 +30,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:displayText"), m_sDisplayText ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:value"), m_sValue ) oReader.ReadTillEnd();
WritingElement_ReadAttributes_End( oReader )
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -57,6 +56,17 @@ namespace ComplexTypes ...@@ -57,6 +56,17 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:displayText"), m_sDisplayText )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:value"), m_sValue )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
nullable<CString > m_sDisplayText; nullable<CString > m_sDisplayText;
...@@ -85,12 +95,10 @@ namespace ComplexTypes ...@@ -85,12 +95,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:prefixMappings"), m_sPrefixMappings ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:storeItemID"), m_sStoreItemID ) oReader.ReadTillEnd();
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:xpath"), m_sXPath )
WritingElement_ReadAttributes_End( oReader )
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -119,6 +127,17 @@ namespace ComplexTypes ...@@ -119,6 +127,17 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:prefixMappings"), m_sPrefixMappings )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:storeItemID"), m_sStoreItemID )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:xpath"), m_sXPath )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -147,10 +166,10 @@ namespace ComplexTypes ...@@ -147,10 +166,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -160,6 +179,15 @@ namespace ComplexTypes ...@@ -160,6 +179,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -186,10 +214,10 @@ namespace ComplexTypes ...@@ -186,10 +214,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -199,6 +227,15 @@ namespace ComplexTypes ...@@ -199,6 +227,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -225,10 +262,10 @@ namespace ComplexTypes ...@@ -225,10 +262,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -238,6 +275,15 @@ namespace ComplexTypes ...@@ -238,6 +275,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -264,10 +310,10 @@ namespace ComplexTypes ...@@ -264,10 +310,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:multiLine"), m_oMultiLine ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -277,6 +323,15 @@ namespace ComplexTypes ...@@ -277,6 +323,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:multiLine"), m_oMultiLine )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
......
...@@ -30,10 +30,10 @@ namespace ComplexTypes ...@@ -30,10 +30,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:w"), m_oW ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -48,6 +48,15 @@ namespace ComplexTypes ...@@ -48,6 +48,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:w"), m_oW )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
......
...@@ -34,12 +34,10 @@ namespace ComplexTypes ...@@ -34,12 +34,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:legacy"), m_oLegacy ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:legacyIndent"), m_oLegacyIndent ) oReader.ReadTillEnd();
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:legacySpace"), m_oLegacySpace )
WritingElement_ReadAttributes_End( oReader )
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -51,6 +49,17 @@ namespace ComplexTypes ...@@ -51,6 +49,17 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:legacy"), m_oLegacy )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:legacyIndent"), m_oLegacyIndent )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:legacySpace"), m_oLegacySpace )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -80,11 +89,10 @@ namespace ComplexTypes ...@@ -80,11 +89,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:null"), m_oNull ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:val"), m_sVal ) oReader.ReadTillEnd();
WritingElement_ReadAttributes_End( oReader )
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -101,6 +109,16 @@ namespace ComplexTypes ...@@ -101,6 +109,16 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:null"), m_oNull )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:val"), m_sVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -128,10 +146,10 @@ namespace ComplexTypes ...@@ -128,10 +146,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -141,6 +159,15 @@ namespace ComplexTypes ...@@ -141,6 +159,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -167,10 +194,10 @@ namespace ComplexTypes ...@@ -167,10 +194,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -180,6 +207,15 @@ namespace ComplexTypes ...@@ -180,6 +207,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("w:val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
......
...@@ -39,15 +39,10 @@ namespace ComplexTypes ...@@ -39,15 +39,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:locked"), m_oLocked ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:name"), m_sName ) oReader.ReadTillEnd();
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:qFormat"), m_oQFormat )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:semiHidden"), m_oSemiHidden )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:uiPriority"), m_oUiPriority )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:unhideWhenUsed"), m_oUnhideWhenUsed )
WritingElement_ReadAttributes_End( oReader )
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -69,6 +64,20 @@ namespace ComplexTypes ...@@ -69,6 +64,20 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:locked"), m_oLocked )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:name"), m_sName )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:qFormat"), m_oQFormat )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:semiHidden"), m_oSemiHidden )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:uiPriority"), m_oUiPriority )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:unhideWhenUsed"), m_oUnhideWhenUsed )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
......
//#include "stdafx.h"
//#include "LIBXML2_LIB/stdafx.h" //#include "LIBXML2_LIB/stdafx.h"
#include "./libxml2.h" #include "./libxml2.h"
...@@ -15,9 +16,9 @@ namespace XmlUtils ...@@ -15,9 +16,9 @@ namespace XmlUtils
{ {
sXml += L" "; sXml += L" ";
sXml += std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->first.GetString(), p->first.GetLength(), TRUE)); sXml += std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->first.GetString(), p->first.GetLength(), TRUE));
sXml += L"='"; sXml += L"=\"";
sXml += std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->second.GetString(), p->second.GetLength(), TRUE)); sXml += std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->second.GetString(), p->second.GetLength(), TRUE));
sXml += L"'"; sXml += L"\"";
} }
sXml += L">"; sXml += L">";
...@@ -47,9 +48,9 @@ namespace XmlUtils ...@@ -47,9 +48,9 @@ namespace XmlUtils
{ {
oWriter.WriteString(L" ", 1); oWriter.WriteString(L" ", 1);
oWriter.WriteString(std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->first.GetString(), p->first.GetLength(), TRUE))); oWriter.WriteString(std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->first.GetString(), p->first.GetLength(), TRUE)));
oWriter.WriteString(L"='", 2); oWriter.WriteString(L"=\"", 2);
oWriter.WriteString(std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->second.GetString(), p->second.GetLength(), TRUE))); oWriter.WriteString(std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->second.GetString(), p->second.GetLength(), TRUE)));
oWriter.WriteString(L"'", 1); oWriter.WriteString(L"\"", 1);
} }
oWriter.WriteString(L">", 1); oWriter.WriteString(L">", 1);
...@@ -157,10 +158,13 @@ namespace XmlUtils ...@@ -157,10 +158,13 @@ namespace XmlUtils
// 1 , // 1 ,
while( TRUE ) while( TRUE )
{ {
if ( 0 == xmlTextReaderRead(reader) ) if ( 1 != xmlTextReaderRead(reader) )
break; break;
eNodeType = (XmlNodeType)xmlTextReaderNodeType(reader); int nTempType = xmlTextReaderNodeType(reader);
if(-1 == nTempType)
break;
eNodeType = (XmlNodeType)nTempType;
nCurDepth = GetDepth(); nCurDepth = GetDepth();
if ( eNodeType == XmlNodeType_Text || eNodeType == XmlNodeType_Whitespace || eNodeType == XmlNodeType_SIGNIFICANT_WHITESPACE ) if ( eNodeType == XmlNodeType_Text || eNodeType == XmlNodeType_Whitespace || eNodeType == XmlNodeType_SIGNIFICANT_WHITESPACE )
...@@ -184,7 +188,7 @@ namespace XmlUtils ...@@ -184,7 +188,7 @@ namespace XmlUtils
} }
nCurDepth = GetDepth(); nCurDepth = GetDepth();
if ( nCurDepth <= nDepth ) if ( nCurDepth < nDepth )
break; break;
if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth ) if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth )
...@@ -203,15 +207,23 @@ namespace XmlUtils ...@@ -203,15 +207,23 @@ namespace XmlUtils
} }
CString CXmlNode::private_GetXml() CString CXmlNode::private_GetXml()
{
return private_GetXml(L"");
}
CString CXmlNode::private_GetXml(const CString& strDefaultValue)
{ {
if (NULL == m_pBase) if (NULL == m_pBase)
return L""; return strDefaultValue;
return m_pBase->GetXml(); return m_pBase->GetXml();
} }
CString CXmlNode::private_GetXmlFast() CString CXmlNode::private_GetXmlFast()
{
return private_GetXmlFast(L"");
}
CString CXmlNode::private_GetXmlFast(const CString& strDefaultValue)
{ {
if (NULL == m_pBase) if (NULL == m_pBase)
return L""; return strDefaultValue;
CStringWriter oWriter; CStringWriter oWriter;
m_pBase->GetXml(oWriter); m_pBase->GetXml(oWriter);
return oWriter.GetData(); return oWriter.GetData();
...@@ -242,6 +254,10 @@ namespace XmlUtils ...@@ -242,6 +254,10 @@ namespace XmlUtils
return true; return true;
} }
BOOL CXmlNode::FromXmlFile2(const CString& strXmlFilePath)
{
return FromXmlFile(strXmlFilePath.GetString()) ? TRUE : FALSE;
}
bool CXmlNode::FromXmlStringA(const std::string& sString) bool CXmlNode::FromXmlStringA(const std::string& sString)
{ {
CXmlDOMDocument* m_pDocument = new CXmlDOMDocument(); CXmlDOMDocument* m_pDocument = new CXmlDOMDocument();
...@@ -255,7 +271,7 @@ namespace XmlUtils ...@@ -255,7 +271,7 @@ namespace XmlUtils
m_pDocument->Parse(); m_pDocument->Parse();
if (NULL != m_pDocument->m_pNode) if (NULL == m_pDocument->m_pNode)
{ {
delete m_pDocument; delete m_pDocument;
return false; return false;
...@@ -275,6 +291,28 @@ namespace XmlUtils ...@@ -275,6 +291,28 @@ namespace XmlUtils
{ {
return (IsValid() ? m_pBase->m_sText : L""); return (IsValid() ? m_pBase->m_sText : L"");
} }
bool CXmlNode::GetTextIfExist(CString& sOutput)
{
bool bRes = false;
if(IsValid() && !m_pBase->m_sText.IsEmpty())
{
sOutput = m_pBase->m_sText;
bRes = true;
}
return bRes;
}
CString CXmlNode::GetTextExt(const CString& strDefaultValue)
{
//todo xml:space preserve
CString sRes;
if(!GetTextIfExist(sRes))
sRes = strDefaultValue;
return sRes;
}
CString CXmlNode::GetXml(const CString& strDefaultValue)
{
return private_GetXmlFast(strDefaultValue);
}
CString CXmlNode::GetName() CString CXmlNode::GetName()
{ {
...@@ -350,11 +388,32 @@ namespace XmlUtils ...@@ -350,11 +388,32 @@ namespace XmlUtils
return std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(pFind->second.GetString(), pFind->second.GetLength(), TRUE)); return std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(pFind->second.GetString(), pFind->second.GetLength(), TRUE));
} }
bool CXmlNode::GetAttributeIfExist(const CString& sName, CString& sOutput)
{
bool bRes = false;
if (IsValid())
{
std::map<CStringA, CStringA>::const_iterator pFind =
m_pBase->m_attributes.find(std_string2string(NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(sName.GetString(), sName.GetLength())));
if (pFind != m_pBase->m_attributes.end())
{
sOutput = std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(pFind->second.GetString(), pFind->second.GetLength(), TRUE));
bRes = true;
}
}
return bRes;
}
CString CXmlNode::GetAttribute(const wchar_t* sName, const CString& _default) CString CXmlNode::GetAttribute(const wchar_t* sName, const CString& _default)
{ {
return GetAttribute(CString(sName), _default); return GetAttribute(CString(sName), _default);
} }
CString CXmlNode::GetAttributeBase(const wchar_t* strAttributeName, const CString& strDefaultValue)
{
return GetAttribute(CString(strAttributeName), strDefaultValue);
}
int CXmlNode::GetAttributeInt(const CStringA& sName, const int& _default) int CXmlNode::GetAttributeInt(const CStringA& sName, const int& _default)
{ {
if (!IsValid()) if (!IsValid())
...@@ -431,6 +490,16 @@ namespace XmlUtils ...@@ -431,6 +490,16 @@ namespace XmlUtils
{ {
return ReadValueString(strName); return ReadValueString(strName);
} }
CString CXmlNode::GetAttributeOrValue(const CString& strAttributeName, const CString& strDefaultValue)
{
CString sRes;
if(!GetAttributeIfExist(strAttributeName, sRes))
{
if(!GetTextIfExist(sRes))
sRes = strDefaultValue;
}
return sRes;
}
CString CXmlNode::ReadValueString(const CString& sName, const CString& nDef) CString CXmlNode::ReadValueString(const CString& sName, const CString& nDef)
{ {
CString sRes; CString sRes;
...@@ -439,6 +508,18 @@ namespace XmlUtils ...@@ -439,6 +508,18 @@ namespace XmlUtils
sRes = oTemp.GetText(); sRes = oTemp.GetText();
return sRes; return sRes;
} }
int CXmlNode::ReadValueInt(const CString& str, const int& nDef)
{
int nRes = nDef;
CXmlNode oTemp;
if(GetNode(str, oTemp))
{
CString sText;
if(oTemp.GetTextIfExist(sText))
nRes = XmlUtils::GetInteger(sText);
}
return nRes;
}
CXmlNode CXmlNode::ReadNode(const CString& strNodeName) CXmlNode CXmlNode::ReadNode(const CString& strNodeName)
{ {
...@@ -448,21 +529,21 @@ namespace XmlUtils ...@@ -448,21 +529,21 @@ namespace XmlUtils
} }
CXmlNode CXmlNode::ReadNodeNoNS(const CString& strNodeName) CXmlNode CXmlNode::ReadNodeNoNS(const CString& strNodeName)
{ {
CXmlNodes oNodes; CXmlNode node;
if (GetNodes(_T("*"), oNodes)) if (IsValid())
{ {
int nCount = oNodes.GetCount(); int nCount = (int)m_pBase->m_nodes.size();
for (int i = 0; i < nCount; ++i) for (int i = 0; i < nCount; ++i)
{ {
CXmlNode node; if (strNodeName == GetNameNoNS(m_pBase->m_nodes[i]->m_sName))
oNodes.GetAt(i, node); {
CXmlNodeBase* pBase = m_pBase->m_nodes[i];
if (strNodeName == GetNameNoNS(node.GetName())) pBase->AddRef();
return node; node.m_pBase = pBase;
break;
}
} }
} }
CXmlNode node;
return node; return node;
} }
...@@ -495,26 +576,48 @@ namespace XmlUtils ...@@ -495,26 +576,48 @@ namespace XmlUtils
CXmlNodes CXmlNode::GetNodes(const CString& sName) CXmlNodes CXmlNode::GetNodes(const CString& sName)
{ {
CXmlNodes oNodes; CXmlNodes oNodes;
if (IsValid())
bool bGetAll = false;
if(_T("*") == sName)
bGetAll = true;
int nCount = (int)m_pBase->m_nodes.size();
for (int i = 0; i < nCount; ++i)
{ {
if (bGetAll || sName == m_pBase->m_nodes[i]->m_sName) bool bGetAll = false;
if(_T("*") == sName)
bGetAll = true;
int nCount = (int)m_pBase->m_nodes.size();
for (int i = 0; i < nCount; ++i)
{ {
CXmlNode oNode; if (bGetAll || sName == m_pBase->m_nodes[i]->m_sName)
oNode.m_pBase = m_pBase->m_nodes[i]; {
if (oNode.m_pBase) CXmlNode oNode;
oNode.m_pBase->AddRef(); oNode.m_pBase = m_pBase->m_nodes[i];
oNodes.m_nodes.insert(oNodes.m_nodes.end(), oNode); if (oNode.m_pBase)
oNode.m_pBase->AddRef();
oNodes.m_nodes.insert(oNodes.m_nodes.end(), oNode);
}
} }
} }
return oNodes; return oNodes;
} }
BOOL CXmlNode::GetChilds(CXmlNodes& oXmlNodes)
{
BOOL bRes = FALSE;
if (IsValid())
{
int nCount = (int)m_pBase->m_nodes.size();
if(nCount > 0)
{
bRes = TRUE;
for (int i = 0; i < nCount; ++i)
{
CXmlNode oNode;
oNode.m_pBase = m_pBase->m_nodes[i];
if (oNode.m_pBase)
oNode.m_pBase->AddRef();
oXmlNodes.m_nodes.insert(oXmlNodes.m_nodes.end(), oNode);
}
}
}
return bRes;
}
bool CXmlNode::GetNodes(const CString& sName, CXmlNodes& oNodes) bool CXmlNode::GetNodes(const CString& sName, CXmlNodes& oNodes)
{ {
oNodes = GetNodes(sName); oNodes = GetNodes(sName);
......
...@@ -353,10 +353,14 @@ namespace XmlUtils ...@@ -353,10 +353,14 @@ namespace XmlUtils
if ( !IsValid() ) if ( !IsValid() )
return FALSE; return FALSE;
if ( 0 == xmlTextReaderRead(reader) ) if ( 1 != xmlTextReaderRead(reader) )
return FALSE; return FALSE;
oNodeType = (XmlNodeType)xmlTextReaderNodeType(reader); int nTempType = xmlTextReaderNodeType(reader);
if(-1 == nTempType)
return FALSE;
oNodeType = (XmlNodeType)nTempType;
return TRUE; return TRUE;
} }
...@@ -372,7 +376,11 @@ namespace XmlUtils ...@@ -372,7 +376,11 @@ namespace XmlUtils
if (1 != xmlTextReaderRead(reader)) if (1 != xmlTextReaderRead(reader))
break; break;
oNodeType = (XmlNodeType)xmlTextReaderNodeType(reader); int nTempType = xmlTextReaderNodeType(reader);
if(-1 == nTempType)
break;
oNodeType = (XmlNodeType)nTempType;
} }
if ( XmlNodeType_Element == oNodeType ) if ( XmlNodeType_Element == oNodeType )
...@@ -390,17 +398,22 @@ namespace XmlUtils ...@@ -390,17 +398,22 @@ namespace XmlUtils
XmlNodeType eNodeType = XmlNodeType_None; XmlNodeType eNodeType = XmlNodeType_None;
int nCurDepth = -1; int nCurDepth = -1;
while ( xmlTextReaderRead(reader) ) while ( 1 == xmlTextReaderRead(reader) )
{ {
eNodeType = (XmlNodeType)xmlTextReaderNodeType(reader); int nTempType = xmlTextReaderNodeType(reader);
nCurDepth = xmlTextReaderDepth(reader); int nTempDepth = xmlTextReaderDepth(reader);
if(-1 == nTempType || -1 == nTempDepth)
return FALSE;
eNodeType = (XmlNodeType)nTempType;
nCurDepth = nTempDepth;
if (nCurDepth <= nDepth) //
if (nCurDepth < nDepth)
break; break;
if ( XmlNodeType_Element == eNodeType && nCurDepth == nDepth + 1 ) if ( XmlNodeType_Element == eNodeType && nCurDepth == nDepth + 1 )
return TRUE; return TRUE;
else if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth + 1 ) else if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth )
return FALSE; return FALSE;
} }
...@@ -413,25 +426,28 @@ namespace XmlUtils ...@@ -413,25 +426,28 @@ namespace XmlUtils
if ( -2 == nDepth ) if ( -2 == nDepth )
nDepth = GetDepth(); nDepth = GetDepth();
else if ( nDepth == GetDepth() && xmlTextReaderIsEmptyElement(reader) ) else if ( nDepth == GetDepth() && 0 != xmlTextReaderIsEmptyElement(reader) )
return TRUE; return TRUE;
XmlNodeType eNodeType = XmlNodeType_None; XmlNodeType eNodeType = XmlNodeType_None;
int nCurDepth = -1; int nCurDepth = -1;
// 1 , //
while( TRUE ) while( TRUE )
{ {
if ( 0 == xmlTextReaderRead(reader) ) if ( 1 != xmlTextReaderRead(reader) )
break; break;
eNodeType = (XmlNodeType)xmlTextReaderNodeType(reader); int nTempType = xmlTextReaderNodeType(reader);
if(-1 == nTempType)
return FALSE;
eNodeType = (XmlNodeType)nTempType;
nCurDepth = GetDepth(); nCurDepth = GetDepth();
if ( nCurDepth <= nDepth )
if ( nCurDepth < nDepth )
break; break;
if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth + 1 ) if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth )
break; break;
} }
...@@ -469,14 +485,17 @@ namespace XmlUtils ...@@ -469,14 +485,17 @@ namespace XmlUtils
if ( !IsValid() ) if ( !IsValid() )
return -1; return -1;
return xmlTextReaderDepth(reader); int nTempDepth = xmlTextReaderDepth(reader);
if(-1 == nTempDepth)
return -1;
return nTempDepth;
} }
inline BOOL IsEmptyNode() inline BOOL IsEmptyNode()
{ {
if ( !IsValid() ) if ( !IsValid() )
return FALSE; return FALSE;
return xmlTextReaderIsEmptyElement(reader); return 0 != xmlTextReaderIsEmptyElement(reader) ? TRUE : FALSE;
} }
inline const wchar_t* GetText() inline const wchar_t* GetText()
...@@ -513,7 +532,7 @@ namespace XmlUtils ...@@ -513,7 +532,7 @@ namespace XmlUtils
CString sResult; CString sResult;
if ( xmlTextReaderIsEmptyElement(reader) ) if ( 0 != xmlTextReaderIsEmptyElement(reader) )
return sResult; return sResult;
int nDepth = GetDepth(); int nDepth = GetDepth();
...@@ -546,14 +565,14 @@ namespace XmlUtils ...@@ -546,14 +565,14 @@ namespace XmlUtils
if ( !IsValid() ) if ( !IsValid() )
return FALSE; return FALSE;
return (BOOL)xmlTextReaderMoveToFirstAttribute(reader); return 1 == xmlTextReaderMoveToFirstAttribute(reader) ? TRUE: FALSE;
} }
inline BOOL MoveToNextAttribute() inline BOOL MoveToNextAttribute()
{ {
if ( !IsValid() ) if ( !IsValid() )
return FALSE; return FALSE;
return (BOOL)xmlTextReaderMoveToNextAttribute(reader);; return 1 == xmlTextReaderMoveToNextAttribute(reader) ? TRUE: FALSE;
} }
inline BOOL MoveToElement() inline BOOL MoveToElement()
...@@ -561,7 +580,7 @@ namespace XmlUtils ...@@ -561,7 +580,7 @@ namespace XmlUtils
if ( !IsValid() ) if ( !IsValid() )
return FALSE; return FALSE;
return (BOOL)xmlTextReaderMoveToElement(reader); return 1 == xmlTextReaderMoveToElement(reader) ? TRUE: FALSE;
} }
private: private:
inline CString GetXml(bool bInner) inline CString GetXml(bool bInner)
...@@ -582,10 +601,13 @@ namespace XmlUtils ...@@ -582,10 +601,13 @@ namespace XmlUtils
// //
while( TRUE ) while( TRUE )
{ {
if ( 0 == xmlTextReaderRead(reader) ) if ( 1 != xmlTextReaderRead(reader) )
break; break;
eNodeType = (XmlNodeType)xmlTextReaderNodeType(reader); int nTempType = xmlTextReaderNodeType(reader);
if(-1 == nTempType)
break;
eNodeType = (XmlNodeType)nTempType;
nCurDepth = GetDepth(); nCurDepth = GetDepth();
if ( eNodeType == XmlNodeType_Text || eNodeType == XmlNodeType_Whitespace ) if ( eNodeType == XmlNodeType_Text || eNodeType == XmlNodeType_Whitespace )
...@@ -603,7 +625,7 @@ namespace XmlUtils ...@@ -603,7 +625,7 @@ namespace XmlUtils
} }
nCurDepth = GetDepth(); nCurDepth = GetDepth();
if ( nCurDepth <= nDepth ) if ( nCurDepth < nDepth )
break; break;
if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth ) if ( XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth )
...@@ -739,10 +761,11 @@ namespace XmlUtils ...@@ -739,10 +761,11 @@ namespace XmlUtils
return FromXmlFile(std::wstring(sFile), bRemoveRootNode); return FromXmlFile(std::wstring(sFile), bRemoveRootNode);
} }
bool FromXmlFile(const std::wstring& sFile, bool bRemoveRootNode = false); bool FromXmlFile(const std::wstring& sFile, bool bRemoveRootNode = false);
BOOL FromXmlFile2(const CString& strXmlFilePath);
bool FromXmlStringA(const std::string& sString); bool FromXmlStringA(const std::string& sString);
bool FromXmlString(const wchar_t* sString) bool FromXmlString(const wchar_t* sString)
{ {
return FromXmlFile(std::wstring(sString)); return FromXmlString(std::wstring(sString));
} }
bool FromXmlString(const std::wstring& sString); bool FromXmlString(const std::wstring& sString);
...@@ -750,12 +773,17 @@ namespace XmlUtils ...@@ -750,12 +773,17 @@ namespace XmlUtils
void Clear(); void Clear();
CString GetName(); CString GetName();
CString GetText(); CString GetText();
bool GetTextIfExist(CString& sOutput);
CString GetTextExt(const CString& strDefaultValue = _T(""));
CString GetXml(const CString& strDefaultValue = _T(""));
CString ReadAttributeBase(const wchar_t* bstrName); CString ReadAttributeBase(const wchar_t* bstrName);
template<typename T> template<typename T>
void ReadAttributeBase(const wchar_t* bsName, T& value) void ReadAttributeBase(const wchar_t* bsName, T& value)
{ {
value = GetAttribute(CString(bsName)).GetString(); CString sAttr;
if(GetAttributeIfExist(CString(bsName), sAttr))
value = sAttr.GetString();
} }
CString ReadAttribute(const CString& strAttibuteName); CString ReadAttribute(const CString& strAttibuteName);
template<typename T> template<typename T>
...@@ -765,11 +793,10 @@ namespace XmlUtils ...@@ -765,11 +793,10 @@ namespace XmlUtils
return; return;
std::map<CStringA, CStringA>::iterator p; std::map<CStringA, CStringA>::iterator p;
for (p = m_attributes.begin(); p != m_attributes.end(); ++p) for (p = m_pBase->m_attributes.begin(); p != m_pBase->m_attributes.end(); ++p)
{ {
p->first.c_str(), p->first.length() strNames.AddTail(std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->first.GetString(), p->first.GetLength(), TRUE)));
strNames.push_back(p->first); strValues.AddTail(std_string2string(NSFile::CUtf8Converter::GetUnicodeFromCharPtr(p->second.GetString(), p->second.GetLength(), TRUE)));
strValues.push_back(p->second);
} }
} }
...@@ -779,7 +806,9 @@ namespace XmlUtils ...@@ -779,7 +806,9 @@ namespace XmlUtils
CString GetAttribute(const CStringA& sName, const CString& _default = L""); CString GetAttribute(const CStringA& sName, const CString& _default = L"");
CString GetAttribute(const CString& sName, const CString& _default = L""); CString GetAttribute(const CString& sName, const CString& _default = L"");
CString GetAttribute(const wchar_t* sName, const CString& _default = L""); CString GetAttribute(const wchar_t* sName, const CString& _default = L"");
CString GetAttributeBase(const wchar_t* strAttributeName, const CString& strDefaultValue = _T(""));
bool GetAttributeIfExist(const CString& sName, CString& sOutput);
int GetAttributeInt(const CStringA& sName, const int& _default = 0); int GetAttributeInt(const CStringA& sName, const int& _default = 0);
int GetAttributeInt(const CString& sName, const int& _default = 0); int GetAttributeInt(const CString& sName, const int& _default = 0);
int ReadAttributeInt(const CString& str, const int& nDef = 0); int ReadAttributeInt(const CString& str, const int& nDef = 0);
...@@ -796,9 +825,12 @@ namespace XmlUtils ...@@ -796,9 +825,12 @@ namespace XmlUtils
} }
CString ReadNodeText(const CString& strName); CString ReadNodeText(const CString& strName);
CString ReadValueString(const CString& sName, const CString& nDef = _T("")); CString ReadValueString(const CString& sName, const CString& nDef = _T(""));
int ReadValueInt(const CString& str, const int& nDef = 0);
CString GetAttributeOrValue(const CString& strAttributeName, const CString& strDefaultValue = _T(""));
template <typename T> template <typename T>
void LoadArray(const CString& sName, std::vector<T>& arList) void LoadArray(const CString& sName, CAtlArray<T>& arList)
{ {
CXmlNodes oNodes; CXmlNodes oNodes;
if (GetNodes(sName, oNodes)) if (GetNodes(sName, oNodes))
...@@ -809,13 +841,13 @@ namespace XmlUtils ...@@ -809,13 +841,13 @@ namespace XmlUtils
CXmlNode oItem; CXmlNode oItem;
oNodes.GetAt(i, oItem); oNodes.GetAt(i, oItem);
arList.reserve(arList.size() + 1); arList.Add();
arList[i].fromXML(oItem); arList[i].fromXML(oItem);
} }
} }
} }
template <typename T> template <typename T>
void LoadArray(const CString& sName, const CString& sSubName, std::vector<T>& arList) void LoadArray(const CString& sName, const CString& sSubName, CAtlArray<T>& arList)
{ {
CXmlNode oNode; CXmlNode oNode;
if (GetNode(sName, oNode)) if (GetNode(sName, oNode))
...@@ -826,6 +858,7 @@ namespace XmlUtils ...@@ -826,6 +858,7 @@ namespace XmlUtils
CXmlNode GetNode(const CString& sName); CXmlNode GetNode(const CString& sName);
CXmlNodes GetNodes(const CString& sName); CXmlNodes GetNodes(const CString& sName);
BOOL GetChilds(CXmlNodes& oXmlNodes);
bool GetNode(const CString& sName, CXmlNode& oNode); bool GetNode(const CString& sName, CXmlNode& oNode);
bool GetNodes(const CString& sName, CXmlNodes& oNodes); bool GetNodes(const CString& sName, CXmlNodes& oNodes);
...@@ -836,7 +869,9 @@ namespace XmlUtils ...@@ -836,7 +869,9 @@ namespace XmlUtils
CString GetNameNoNS(const CString& strNodeName); CString GetNameNoNS(const CString& strNodeName);
public: public:
CString private_GetXml(); CString private_GetXml();
CString private_GetXml(const CString& strDefaultValue = _T(""));
CString private_GetXmlFast(); CString private_GetXmlFast();
CString private_GetXmlFast(const CString& strDefaultValue);
}; };
class CXmlNodes class CXmlNodes
...@@ -848,7 +883,10 @@ namespace XmlUtils ...@@ -848,7 +883,10 @@ namespace XmlUtils
CXmlNodes() : m_nodes() CXmlNodes() : m_nodes()
{ {
} }
BOOL IsValid()
{
return TRUE;
}
int GetCount() int GetCount()
{ {
return (int)m_nodes.size(); return (int)m_nodes.size();
......
//#include "stdafx.h"
#include "stringcommon.h" #include "stringcommon.h"
std::wstring string2std_string(const CString& val) std::wstring string2std_string(const CString& val)
......
...@@ -105,6 +105,13 @@ namespace XmlUtils ...@@ -105,6 +105,13 @@ namespace XmlUtils
return _T(""); return _T("");
return strNodeName.Mid(0, nFind); return strNodeName.Mid(0, nFind);
} }
AVSINLINE CString GetNamespace(const wchar_t* strNodeName)
{
const wchar_t* find = wcschr(strNodeName, TCHAR(':'));
if(NULL == find)
return _T("");
return CString(strNodeName, find - strNodeName);
}
AVSINLINE CString GetNameNoNS(const CString& strNodeName) AVSINLINE CString GetNameNoNS(const CString& strNodeName)
{ {
int nFind = strNodeName.Find(TCHAR(':')); int nFind = strNodeName.Find(TCHAR(':'));
...@@ -112,6 +119,13 @@ namespace XmlUtils ...@@ -112,6 +119,13 @@ namespace XmlUtils
return strNodeName; return strNodeName;
return strNodeName.Mid(nFind + 1); return strNodeName.Mid(nFind + 1);
} }
AVSINLINE CString GetNameNoNS(const wchar_t* strNodeName)
{
const wchar_t* find = wcschr(strNodeName, TCHAR(':'));
if(NULL == find)
return CString(strNodeName);
return CString(find + 1);
}
// classes // classes
class CXmlWriter class CXmlWriter
{ {
......
...@@ -68,10 +68,10 @@ namespace ComplexTypes ...@@ -68,10 +68,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -86,7 +86,15 @@ namespace ComplexTypes ...@@ -86,7 +86,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
nullable<SimpleTypes::CDecimalNumber<> > m_oVal; nullable<SimpleTypes::CDecimalNumber<> > m_oVal;
...@@ -108,10 +116,10 @@ namespace ComplexTypes ...@@ -108,10 +116,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_sVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -135,6 +143,15 @@ namespace ComplexTypes ...@@ -135,6 +143,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_sVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -157,10 +174,10 @@ namespace ComplexTypes ...@@ -157,10 +174,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -175,6 +192,15 @@ namespace ComplexTypes ...@@ -175,6 +192,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -197,10 +223,10 @@ namespace ComplexTypes ...@@ -197,10 +223,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -215,6 +241,15 @@ namespace ComplexTypes ...@@ -215,6 +241,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -237,10 +272,10 @@ namespace ComplexTypes ...@@ -237,10 +272,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -255,6 +290,15 @@ namespace ComplexTypes ...@@ -255,6 +290,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -277,10 +321,10 @@ namespace ComplexTypes ...@@ -277,10 +321,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -295,6 +339,15 @@ namespace ComplexTypes ...@@ -295,6 +339,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -317,10 +370,10 @@ namespace ComplexTypes ...@@ -317,10 +370,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -335,6 +388,15 @@ namespace ComplexTypes ...@@ -335,6 +388,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -357,10 +419,10 @@ namespace ComplexTypes ...@@ -357,10 +419,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -375,6 +437,15 @@ namespace ComplexTypes ...@@ -375,6 +437,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -397,10 +468,10 @@ namespace ComplexTypes ...@@ -397,10 +468,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -415,6 +486,15 @@ namespace ComplexTypes ...@@ -415,6 +486,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
...@@ -437,10 +517,10 @@ namespace ComplexTypes ...@@ -437,10 +517,10 @@ namespace ComplexTypes
} }
virtual void FromXML(XmlUtils::CXmlLiteReader& oReader) virtual void FromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
// ReadAttributes(oReader);
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal ) if ( !oReader.IsEmptyNode() )
WritingElement_ReadAttributes_End( oReader ) oReader.ReadTillEnd();
} }
virtual CString ToString() const virtual CString ToString() const
{ {
...@@ -455,6 +535,15 @@ namespace ComplexTypes ...@@ -455,6 +535,15 @@ namespace ComplexTypes
return sResult; return sResult;
} }
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
//
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("val"), m_oVal )
WritingElement_ReadAttributes_End( oReader )
}
public: public:
......
...@@ -50,6 +50,9 @@ namespace OOX ...@@ -50,6 +50,9 @@ namespace OOX
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
ReadAttributes(oReader); ReadAttributes(oReader);
if ( !oReader.IsEmptyNode() )
oReader.ReadTillEnd();
} }
virtual EElementType getType () const virtual EElementType getType () const
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment