20 #ifndef _TnbXML_MsXml6_ENABLE
21 #import <msxml.dll> rename(
"value",
"Value")
24 #import "msxml6.dll" rename(
"value",
"Value")
29#if ! defined(__MSVCPP6__) && ! defined(_UNICODE)
30 #pragma comment(lib,"comsuppw.lib")
31 #pragma comment(lib,"comsuppwd.lib")
89 MSXML::IXMLDOMNodeListPtr m_pNodes;
91 MSXML::IXMLDOMDocumentPtr m_pDoc;
98 m_pDoc = m_pParent->GetownerDocument();
105 n = m_pDoc->createElement(str);
108 n = m_pDoc->createTextNode(str);
112 n = m_pDoc->createComment(str);
127 : m_pNodes(na), m_pParent(pp), m_pDoc(dc)
139 return m_pNodes != NULL;
160 return m_pNodes->Getlength();
171 return m_pNodes->Getitem(
static_cast<long>(index));
194 return GetNode(index)->GetnodeType();
205 return m_pParent->appendChild(newItem);
231 return m_pParent->insertBefore(newItem,
GetNode(index).GetInterfacePtr());
233 return m_pParent->appendChild(newItem);
246 return InsertNode(index, m_MakeNewNode(type, text));
266 m_pParent->removeChild(
GetNode(index));
270 friend class CXmlTest;
294 MSXML::IXMLDOMAttributePtr m_pAttr;
314 return m_pAttr != NULL;
334 _bstr_t r = m_pAttr->Getname();
335 return CStr(LPCTSTR(r));
344 _bstr_t r = m_pAttr->GetValue();
345 return CStr(LPCTSTR(r));
355 m_pAttr->PutValue(text);
359 friend class CXmlTest;
390 m_initRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
396 if ( m_initRes == S_OK )
443 _bstr_t r =
m_pNode->GetnodeName();
456 _bstr_t r =
m_pNode->GetnodeValue();
506 if ( n->GetnodeType() == MSXML::NODE_DOCUMENT )
510 str =
CStr::Fmt(_T(
"/%s%s"), LPCTSTR(n->GetnodeName()), str);
511 n = n->GetparentNode();
518 friend class CXmlTest;
573 return IsValid() ?
m_pNode->GetnodeType() : MSXML::DOMNodeType(MSXML::NODE_INVALID);
577 friend class CXmlTest;
661 if (
GetText().IsEqual(newName) )
678 return m_pNode->cloneNode(VARIANT_FALSE);
682 friend class CXmlTest;
783 return m_pNode->cloneNode(VARIANT_FALSE);
787 friend class CXmlTest;
834 if ( n.
GetNodeType() == MSXML::NODE_PROCESSING_INSTRUCTION )
848 if ( n.
GetNodeType() == MSXML::NODE_PROCESSING_INSTRUCTION )
885 return m_pAttr->Getitem(
static_cast<long>(index));
900 return m_pAttr->getNamedItem(name);
929 MSXML::IXMLDOMDocumentPtr pDoc =
m_pNode->GetownerDocument();
930 MSXML::IXMLDOMAttributePtr p = pDoc->createAttribute(name);
932 return m_pAttr->setNamedItem(p);
955 friend class CXmlTest;
1039 MSXML::IXMLDOMNamedNodeMapPtr pOldAttrList =
m_pNode->Getattributes();
1040 if ( NULL != pOldAttrList )
1042 MSXML::IXMLDOMNamedNodeMapPtr pNewAttrList = n->Getattributes();
1043 MSXML::IXMLDOMAttributePtr pAttr;
1044 while ( (pAttr = pOldAttrList->nextNode()) != NULL )
1046 pNewAttrList->setNamedItem(pAttr->cloneNode(VARIANT_TRUE));
1050 MSXML::IXMLDOMNodePtr pChild;
1051 while ( (pChild =
m_pNode->GetfirstChild()) != NULL )
1053 n->appendChild(pChild);
1056 MSXML::IXMLDOMNodePtr p =
m_pNode->GetparentNode();
1069 if ( !
IsValid() ) {
return false; }
1070 return VARIANT_FALSE !=
m_pNode->hasChildNodes();
1080 return m_pNode->GetfirstChild();
1122 return m_pNode->GetparentNode();
1135 return m_pNode->cloneNode(boIsDeep ? VARIANT_TRUE : VARIANT_FALSE);
1182 return m_pNode->appendChild(a.operator ->());
1186 friend class CXmlTest;
1221 if ( n->GetnodeType() == MSXML::NODE_DOCUMENT_FRAGMENT )
1259 MSXML::IXMLDOMDocumentPtr m_pDoc;
1262 void m_Release(
void)
1270#ifndef _TnbXML_MsXml6_ENABLE
1271 MSXML::IXMLDOMDocumentPtr p(__uuidof(MSXML::DOMDocument));
1273 MSXML::IXMLDOMDocumentPtr p(__uuidof(MSXML::DOMDocument60));
1276 p->put_async(VARIANT_FALSE);
1286 bool m_Load(LPCTSTR text,
bool isFile)
1289 _bstr_t bstr = text;
1290 VARIANT_BOOL varResult;
1293 varResult = m_pDoc->load(_variant_t(bstr));
1297 varResult = m_pDoc->loadXML(bstr);
1299 bool r = ( VARIANT_FALSE != varResult );
1312 m_initRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
1319 if ( m_initRes == S_OK )
1333 return m_pDoc != NULL;
1351 return m_pDoc->GetparseError()->GeterrorCode();
1361 MSXML::IXMLDOMParseErrorPtr pError = m_pDoc->GetparseError();
1362 if ( pError->GeterrorCode() != 0 )
1364 _bstr_t bstr = pError->Getreason();
1378 void Initialize(LPCTSTR lpszRootElementName, LPCTSTR lpszComment = NULL, LPCTSTR lpszTarget = NULL, LPCTSTR lpszData = NULL)
1381 if ( lpszTarget != NULL && lpszData != NULL )
1383 CXmlNodePtr pNode = m_pDoc->createProcessingInstruction(lpszTarget, lpszData);
1384 m_pDoc->appendChild(pNode);
1386 if ( lpszComment != NULL )
1388 CXmlNodePtr pNode = m_pDoc->createComment(lpszComment);
1389 m_pDoc->appendChild(pNode);
1391 CXmlNodePtr pNode = m_pDoc->createElement(lpszRootElementName);
1392 m_pDoc->appendChild(pNode);
1404 CXmlNodePtr pNode = m_pDoc->createProcessingInstruction(_T(
"xml"), _T(
"version='1.0'"));
1405 m_pDoc->appendChild(pNode);
1406 if ( lpszComment != NULL )
1408 CXmlNodePtr pNode = m_pDoc->createComment(lpszComment);
1409 m_pDoc->appendChild(pNode);
1411 pNode = m_pDoc->createElement(lpszRootElementName);
1412 m_pDoc->appendChild(pNode);
1423 return m_Load(lpszFileName,
true);
1434 return m_Load(lpszXml,
false);
1446 bool SaveFile(LPCTSTR lpszFileName,
bool boIsUtf8 =
true)
const
1448 _bstr_t bstr = lpszFileName;
1452 pi.
SetAttribute(_T(
"encoding"), (boIsUtf8 ? _T(
"UTF-8") : _T(
"SJIS")));
1454 return SUCCEEDED(m_pDoc->save(bstr));
1458#ifdef _TnbXML_MsXml6_ENABLE
1472 bool SaveFileEx(LPCTSTR lpszFileName,
bool boIsUtf8 =
true)
const
1474 IStreamPtr stream = NULL;
1477 typedef HRESULT (WINAPI *P_SHCreateStreamOnFileW)(LPCWSTR, DWORD, IStream**);
1480 STGM_READWRITE | STGM_SHARE_DENY_WRITE | STGM_CREATE,
1489 if ( stream == NULL )
1494 MSXML2::IMXWriterPtr wrt(__uuidof(MSXML2::MXXMLWriter60));
1495 wrt->put_version(L
"1.0");
1496 wrt->put_encoding(boIsUtf8 ? L
"UTF-8" : L
"SJIS");
1497 wrt->put_indent(VARIANT_TRUE);
1498 wrt->Putstandalone(VARIANT_TRUE);
1499 wrt->put_output(_variant_t(IUnknownPtr(stream).GetInterfacePtr()));
1500 MSXML2::ISAXXMLReaderPtr rdr(__uuidof(MSXML2::SAXXMLReader60));
1502 rdr->putContentHandler(MSXML2::ISAXContentHandlerPtr(wrt));
1503 _variant_t vinput = IUnknownPtr(m_pDoc).GetInterfacePtr();
1504 return SUCCEEDED(rdr->parse(vinput));
1518 _bstr_t str = m_pDoc->Getxml();
1519 return CStr(LPCTSTR(str));
1529 return CXmlNodeList(m_pDoc->GetchildNodes(), m_pDoc, m_pDoc);
1542 if ( list.
GetNodeType(i) == MSXML::NODE_PROCESSING_INSTRUCTION )
1585 return CXmlNodeList(m_pDoc->getElementsByTagName(name), m_pDoc, m_pDoc);
1596 return CXmlNodeList(m_pDoc->selectNodes(expression), m_pDoc, m_pDoc);
1607 return CXmlNode(m_pDoc->selectSingleNode(expression));
1611 friend class CXmlTest;
#define loop(VAR, CNT)
loop構文.
CXmlNodePtr GetParentNode(void) const
[取得] 親のノード取得.
CXmlNodePtr operator->(void)
[取得] ポインタハンドル取得.
CXmlNodePtr GetNextSibling(void) const
[取得] 隣のノード取得.
CStr GetElementFullPath(void) const
[作成] ルートからの Element名.
void Invalid(void)
[設定] 無効化.
bool IsValid(void) const
[確認] 有効確認.
CXmlNodePtr m_pNode
ノードクラスのポインタハンドル
CStr GetNodeValue(void) const
[取得] 値取得.
virtual ~CAbstractXmlNode(void)
デストラクタ
void Remove(void)
[削除] 自分自身を削除.
CStr GetNodeName(void) const
[取得] 名前取得.
CAbstractXmlNode(CXmlNodePtr p)
コンストラクタ
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
void OnCatch(void) const
[表示] 内容表示
CXmlAttribute(MSXML::IXMLDOMAttributePtr p)
コントラクタ
bool IsValid(void) const
[確認] 有効確認.
MSXML::IXMLDOMAttributePtr operator->(void)
[取得] ポインタハンドル取得.
CStr GetName(void) const
[取得] 名前取得.
void PutValue(LPCTSTR text)
[設定] 値設定.
CStr GetValue(void) const
[取得] 値取得.
XML DocumentFragment ノード管理クラス
CXmlDocumentFragment(MSXML::IXMLDOMDocumentFragmentPtr n)
コンストラクタ
virtual ~CXmlDocument(void)
デストラクタ
CXmlNode SelectSingleNode(LPCTSTR expression) const
[検索] 条件一致ノード検索.
void Initialize(LPCTSTR lpszRootElementName, LPCTSTR lpszComment=NULL, LPCTSTR lpszTarget=NULL, LPCTSTR lpszData=NULL)
[操作] 初期化
void Invalid(void)
[設定] 無効化.
CXmlNodeList GetChildNodes(void) const
[取得] 子ノード群取得.
CXmlNodeList GetElementsByTagName(LPCTSTR name) const
[検索] 条件一致ノード検索.
bool SaveFile(LPCTSTR lpszFileName, bool boIsUtf8=true) const
[作成] XMLファイル作成
bool IsValid(void) const
[確認] 有効確認.
void InitializeXml(LPCTSTR lpszRootElementName, LPCTSTR lpszComment=NULL)
[操作] 初期化
CXmlProcessingInstruction GetProcessingInstruction(void) const
[取得] ProcessingInstruction ノード取得.
CStr GetLastErrorString(void) const
[取得] エラーコード文字列
CXmlElement GetRootElement(void) const
[取得] Element ノード取得.
CXmlNodeList SelectNodes(LPCTSTR expression) const
[検索] 条件一致ノード検索.
CXmlDocumentFragment CreateDocumentFragment(void) const
[作成] DocumentFragment作成.
CXmlDocument(void)
コンストラクタ
CStr ToString(void) const
[作成] XMLテキスト作成
bool LoadXml(LPCTSTR lpszXml)
[設定] XMLテキスト読込
bool LoadFile(LPCTSTR lpszFileName)
[設定] XMLファイル読込
DWORD GetLastError(void) const
[取得] エラーコード
bool SaveFileEx(LPCTSTR lpszFileName, bool boIsUtf8=true) const
[作成] XMLファイル作成
CXmlNode SelectSingleNode(LPCTSTR expression) const
[検索] 条件一致ノード検索.
bool HasChildNodes(void) const
[確認] 子ノード有無確認.
CXmlElement & operator=(CXmlNode n)
[代入] 代入
CXmlNode Clone(bool boIsDeep=true) const
[作成] クローン作成.
CXmlElement(CXmlNode n)
コンストラクタ
CXmlComment AppendChildComment(LPCTSTR text)
[追加] コメント子ノード追加.
CXmlNodeList GetChildNodes(void) const
[取得] 子ノード群取得.
CXmlNode AppendChildNode(CAbstractXmlNode &a)
[追加] 子ノード追加.
CXmlElement AppendChildElement(LPCTSTR text)
[追加] Element 子ノード追加.
void Rename(LPCTSTR newName)
[変更] 名前変更.
CXmlElement GetParentNode(void) const
[取得] 親 Element ノード取得.
CXmlNodeList SelectNodes(LPCTSTR expression) const
[検索] 条件一致ノード検索.
CXmlNode GetFirstChild(void) const
[取得] 最初の子ノード取得.
CXmlText AppendChildText(LPCTSTR text)
[追加] テキスト子ノード追加.
void RemoveNode(INDEX index)
[削除] ノード削除.
CXmlNodePtr InsertNode(INDEX index, ENodeType type, LPCTSTR text)
[追加] ノード追加.
size_t GetLength(void) const
[取得] 管理ノード数取得.
bool IsValid(void) const
[確認] 有効確認.
MSXML::DOMNodeType GetNodeType(INDEX index) const
[取得] ノードタイプ取得.
void ReplaceNode(INDEX index1, INDEX index2)
[操作] ノード入れ替え.
CXmlNodePtr InsertNode(INDEX index, CXmlNodePtr newItem)
[追加] ノード追加.
CXmlNodeList(MSXML::IXMLDOMNodeListPtr na, CXmlNodePtr pp, MSXML::IXMLDOMDocumentPtr dc=NULL)
コンストラクタ
CXmlNodePtr AppendNode(CXmlNodePtr newItem)
[追加] ノード追加.
CXmlNodePtr AppendNode(ENodeType type, LPCTSTR text)
[追加] ノード追加.
CXmlNodePtr GetNode(INDEX index) const
[取得] ノード取得.
MSXML::IXMLDOMNodeListPtr operator->(void)
[取得] ポインタハンドル取得.
MSXML::DOMNodeType GetNodeType(void) const
[取得] ノードタイプ取得.
CXmlNode(CXmlNodePtr p)
コンストラクタ
XML ProcessingInstruction 管理クラス
CXmlProcessingInstruction & operator=(CXmlNode n)
[代入] 代入
CXmlProcessingInstruction(void)
コンストラクタ
CXmlProcessingInstruction(CXmlNode n)
コンストラクタ
CXmlAttribute GetAttributeByName(LPCTSTR name) const
[取得] 属性取得.
MSXML::IXMLDOMNamedNodeMapPtr m_pAttr
ノード名前マップクラスのポインタハンドル
bool RemoveAttribute(LPCTSTR name)
[設定] 属性削除.
CXmlAttribute SetAttribute(LPCTSTR name, LPCTSTR value)
[設定] 属性設定.
CStr GetAttributeValue(LPCTSTR name) const
[取得] 属性値取得.
CXmlAttribute GetAttribute(INDEX index) const
[取得] 属性取得.
long GetAttributeLength(void) const
[取得] 属性数取得.
CStr GetText(void) const
[取得] TEXT 取得.
CXmlText Clone(void) const
[作成] クローン作成.
CXmlText(CXmlNode n)
コンストラクタ
void Rename(LPCTSTR newName)
[変更] 名前変更.
CXmlText & operator=(CXmlNode n)
[代入] 代入
TNB::CStrT< WCHAR > CUnicode
UNICODE文字列クラス
TNB::CStrT< TCHAR > CStr
文字列クラス
MSXML::IXMLDOMNodePtr CXmlNodePtr
XML ノードポインタハンドルクラス