关于在XML节点值中插入含有xml标签符号的值的问题

yangki 2004-06-17 05:13:51
我想在给一个节点后擦如一串字符串,这个字符串中包含有 '<' '>' 这样的标签,
我要达到的目的是
插入前:
<root>
<head>
</head>
</root>
然后在head节点后插入类似于这样的字符串 “abc <a>qq</a> asdad <b>ww</b>”
插入后的效果是:
<root>
<head>abc
<a>qq
</a>
asdad
<b>ww
</b>
</head>
</root>
依然是一个合法完好的XML文件。
我现在得到了<head>节点的 IXMLDOMNodePtr或者IXMLDOMElementPtr
我使用 方法put_text但是插入的值中的 '<' '>' 这样的标签都被替换成了 <;,>; 我想知道有没有办法 直接插入值,而没有标签没有被转换。
...全文
337 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2004-06-28
  • 打赏
  • 举报
回复
实际上都一样。跟踪进去看看智能指针到底做了些什么
yangki 2004-06-27
  • 打赏
  • 举报
回复
对了,我想再请教一个小问题。
得到DOMDocument对象,或者对象指针时,为什么有那么多方法:

有这样的:
hr=CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPPROC_SERVER,

IID_IXMLDOMDocument,(void**)&pXMLDoc);
,有这样的:
CComPtr<IXMLDOMDocument> spXMLDOM;
HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
,还有这样的:
docPtr.CreateInstance("Msxml2.DOMDocument.4.0");

我自己很迷惑,为什么有不同的方法,有什么区别。 而且,这样的对象最后都要release()吗? 我看到有的代码,节点对象也release(),这里有什么必然的关系吗?



yangki 2004-06-27
  • 打赏
  • 举报
回复
你还是误解了我的意思,

看看http://community.csdn.net/Expert/topic/3123/3123769.xml?temp=.172085

是这样的一个问题。不过还是谢谢你,谢谢你的讲解,你让我知道了CreateTextNode是怎么用的。
蒋晟 2004-06-27
  • 打赏
  • 举报
回复
CreateTextNode不能一次创建多个节点。

你的文档的结构
<root>
[Text]\n\t[text]
<head>
[Text]abc\n\t[text]
<a>[Text]qq\n\t[text]
</a>
……
明白了么?你要把一个内容是\n\t的文本节点添加到<root>,一个内容是abc\n\t的文本节点添加到<head>,等等
yangki 2004-06-25
  • 打赏
  • 举报
回复
不行啊!使用CreateTextNode也不行,看下面这段代码,运行结果'<','>' 还是被替换掉,
是不是需要有什么设置啊?
#import "msxml4.dll"
using namespace MSXML2;

inline void TESTHR( HRESULT _hr )
{ if FAILED(_hr) throw(_hr); }


void XMLDOMText()
{
try {
IXMLDOMDocumentPtr docPtr;
IXMLDOMNodePtr DOMNodePtr;
IXMLDOMNamedNodeMapPtr DOMNamedNodeMapPtr;

//init
TESTHR(CoInitialize(NULL));
TESTHR(docPtr.CreateInstance("Msxml2.DOMDocument.4.0"));

// load a document
_variant_t varXml("C:\\book.xml");
_variant_t varOut((bool)TRUE);
varOut = docPtr->load(varXml);
if ((bool)varOut == FALSE)
throw(0);

DOMNodePtr = docPtr->createTextNode("abc <a>qq</a> asdad <b>ww</b>");

docPtr->documentElement->appendChild(DOMNodePtr);

MessageBox(NULL, _bstr_t(docPtr->xml), _T("New Document"), MB_OK);

} catch(...)
{
MessageBox(NULL, _T("Exception occurred"), _T("Error"), MB_OK);
}
CoUninitialize();
}
yangki 2004-06-21
  • 打赏
  • 举报
回复
好的,试试看。
蒋晟 2004-06-18
  • 打赏
  • 举报
回复
CreateTextNode
你自己Load那个XML之后看看DOM结构就明白了
yangki 2004-06-18
  • 打赏
  • 举报
回复
为什么没人看看呢?:(
我用操作字符操作的方法已经可以解决这个问题了,我只是想知道在DOM中有没有解决这种问题的方法。
yangki 2004-06-17
  • 打赏
  • 举报
回复
“没有标签被替换掉” 说错了。大家帮忙想想办法,谢谢。

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧