xml.libxml2_添加带tagname的xml文本(xmlNewTextChild)
1、
2、例子代码:
int TgText::NodeNew_G2SVG(xmlNode* _pNodeCurrent_G, xmlNode* _pNodeParent_SVG, xmlNode** _ppNodeNew_SVG) { //// ZC: SVG 方式 //*_ppNodeNew_SVG = ChildNodeCreate(_pNodeParent_SVG, "text"); // ZC: 内嵌HTML方式 xmlNode* pNode_switch = ChildNodeCreate(_pNodeParent_SVG, "switch"); xmlNode* pNode_foreignObject = ChildNodeCreate(pNode_switch, "foreignObject"); //xmlSetProp(pNode_foreignObject, BAD_CAST "x", BAD_CAST ""); //xmlSetProp(pNode_foreignObject, BAD_CAST "y", BAD_CAST ""); xmlSetProp(pNode_foreignObject, BAD_CAST "width", BAD_CAST TextWidth_switch_foreignObject); xmlSetProp(pNode_foreignObject, BAD_CAST "height", BAD_CAST TextHeight_switch_foreignObject); xmlNode* pNode_p = ChildNodeCreate(pNode_foreignObject, "p"); xmlSetProp(pNode_p, BAD_CAST "xmlns", BAD_CAST "http://www.w3.org/1999/xhtml"); { // <switch/>下面的<text/> xmlNode* pNode_text = ChildNodeCreate(pNode_switch, "text"); xmlNode* pContent = xmlNewText(BAD_CAST "<p>Your SVG viewer cannot display html.</p>"); xmlAddChild(pNode_text, pContent); //xmlNewDocRawNode(pNode_text->doc, NULL, BAD_CAST "p", BAD_CAST "Your SVG viewer cannot display html."); xmlNode* p = xmlNewTextChild(pNode_text, NULL, BAD_CAST "p", BAD_CAST "Your SVG viewer cannot display html."); xmlSetProp(p, BAD_CAST "font-size", BAD_CAST "16px"); } *_ppNodeNew_SVG = pNode_p; return 0; }
2.1、上面的代码,主要的目的是 在 <text/>下添加节点内容 “<p>Your SVG viewer cannot display html.</p>”,效果如下:
<text><p>Your SVG viewer cannot display html.</p><p font-size="16px">Your SVG viewer cannot display html.</p></text>
(1)、但是 函数xmlNewText(...) 会将 尖括号 翻译成 “<”和“>”
(2)、xmlNewTextChild(...) 却可以 达到这个效果,还能对 返回的节点指针进行 属性操作
ZC:关注一下 这个函数xmlNewDocRawNode(...),个人感觉 应该也可以,可能是这样设置参数:
XMLPUBFUN xmlNodePtr XMLCALL
xmlNewDocRawNode (xmlDocPtr doc,
xmlNsPtr ns,
const xmlChar *name,// ZC:这里填 节点的tagname
const xmlChar *content // ZC:这里填 节点里面的 文本内容
);
然后对返回的 节点指针 进行操作,如 “xmlAddChild(父节点, 返回的节点指针);” 、属性操作 等 (只是 猜想,待测试)
3、
4、
5、
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
【推荐】AI 的力量,开发者的翅膀:欢迎使用 AI 原生开发工具 TRAE
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
· AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
· InnoDB为什么不用跳表,Redis为什么不用B+树?
· 记一次 C# 平台调用中因非托管 union 类型导致的内存访问越界
· [EF Core]聊聊“复合”属性
· 那些被推迟的 C# 14 特性及其背后的故事
· 博客园出海记-开篇:扬帆启航
· 微软开源的 MCP 教程「GitHub 热点速览」
· 记一次 .NET 某汽车控制焊接软件 卡死分析
· 关于布尔类型的变量不要加 is 前缀,被网友们吐槽了,特来完善下
· C#中的多级缓存架构设计与实现深度解析