我有这样的事情:
uses MSXML2_TLB;
type TDocumentType = (dtOrder, dtInvoice, dtStatus, dtError); // And a few more, actually
function DetermineDocumentType(doc: IXMLDOMDocument2): TDocumentType;
...
它必须做一些简单的事情:确定 doc 参数中包含哪种 XML。XML 可能类似于:<Order>...</Order>
, <Invoice>...</Invoice>
, <Status>...</Status>
,<Error>...</Error>
或者是其他东西。这些文件的内部结构非常相似,因此唯一可靠的方法是通过从 XML 中获取第一个标记名称来确定其类型。Doc.nodeName 和 Doc.baseName 不起作用。我可以将 XML 读取为文本,通过代码对其进行解析以确定标记名,但这是一个我拒绝使用的肮脏技巧。所以我需要一个方法,它会通过 IXMLDOMDocument2 接口的正确方法返回标签名称。更糟糕的是,我无法控制此函数之外的代码,并且作为第二个限制,此根标记恰好不区分大小写,使得使用 selectNode() 之类的技巧无法使用。由于遗留代码和以前的开发人员过去做出的错误决定,这恰好是一个问题。(幸运的是,这个项目中只有根标签看起来很奇怪。)顺便说一句,此功能将替换在 TheDailyWTF 网站上运行良好的类似功能。它以前会从接口读取 XML,将其完全转换为大写,最后执行大量 pos() 函数调用以检查任何可能的标记。效率不高,尤其是因为这段代码必须处理数千个 XML 文件......
那么,如何获取 IXMLDOMDocument2 类型对象中根元素的标签名称呢?