我需要向现有的 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。 我不确定这是否能回答您的问题,但您可以执行以下操作
- 使用 doc->all 枚举所有元素
- 对于每个 IHtmlElement,您可以将标记名与 meta 进行比较(使用 IHtmlElement::get_tagName)
- 对于这些元标记,您可以使用 IHtmlElement::getAttribute 和 setAttribute 方法获取和设置属性)
或者
- 编写一个接受属性名称和值的 Javascript 函数。这应该能够更新您拥有的元标记
- 然后您可以使用 IHtmlDocument2::get_script 作为 IDispatch 获取脚本对象
- 使用此脚本调度调用您的 javascript 函数。
关于c++ - HTML 文件 : add annotations through IHTMLDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2636479/