c++ - HTML 文件 : add annotations through IHTMLDocument

标签 c++ com winapi dom

我需要向现有的 HTML 文档添加“注释”- 最好是我可以通过名称读写的字符串属性值的形式。

显然(对我而言), header 中的元元素似乎是常见的方式 - 即添加/修改元素,如

<head>
  <meta name="unique-id_property-name"  content="property-value"/>
  ...
</head>

问题 1:“可以接受”/ok,还是有更好的方法来添加元数据?

我之前有一点通过 Web 浏览器控件中的 document 获取/修改 HTML 内容的经验。对于此任务,我已经将 HTML 文档加载到 HTMLDocument 对象中,但我不确定如何继续:

// what I have:

IHTMLDocument2Ptr doc;
doc.CreateInstance(__uuidof(HTMLDocument));
IPersistFile pf = doc;
pf->Load(fileName, STGM_READ);  

// ... what now?

问题 2:我应该使用 HTMLDocument 以外的任何东西吗?

问题 3..N: 如何获取 head 元素? 如何获取具有给定名称的元元素的值? 如何设置元元素的值(当且仅当项目不存在时才添加)?

doc->all 返回所有标签的集合,即使 count 返回 0 我也可以枚举它。我可以扫描 head,然后扫描所有标签meta 名称以特定字符串开头的位置,等等 - 但这感觉很笨拙。

最佳答案

我没有足够的经验使用 C++ 处理 HTML。 我不确定这是否能回答您的问题,但您可以执行以下操作

  1. 使用 doc->all 枚举所有元素
  2. 对于每个 IHtmlElement,您可以将标记名与 meta 进行比较(使用 IHtmlElement::get_tagName)
  3. 对于这些元标记,您可以使用 IHtmlElement::getAttribute 和 setAttribute 方法获取和设置属性)

或者

  1. 编写一个接受属性名称和值的 Javascript 函数。这应该能够更新您拥有的元标记
  2. 然后您可以使用 IHtmlDocument2::get_script 作为 IDispatch 获取脚本对象
  3. 使用此脚本调度调用您的 javascript 函数。

关于c++ - HTML 文件 : add annotations through IHTMLDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2636479/

相关文章:

c++ - 模板是否应该为仅移动不同类型的参数创建非右值引用构造函数/赋值?

c++ - 读取由结构定义的二进制文件

c++ - 在我使用完这个对象之前调用析构函数来销毁对象

c++ - CoCreateInstance() 永远不会返回

c++ - Unix/Linux C++ 的 SetConsoleCtrlHandler 等价物

c++ - 如何使用 std::vector push_back 一行二维数组中间的值?

c++ - 如何使 C++ 实时服务器应用程序保持现代 Web 客户端界面?

delphi - 通过Delphi引用WinHTTP.dll

C++ GetBinaryType 失败

c - Excel 加载项 : Assignment in for loop causes segmentation fault but line-by-line assignments work. 为什么?