【发布时间】:2010-06-19 12:34:27
【问题描述】:
我有这样的事情:
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类型的对象中根元素的标签名呢?
【问题讨论】:
标签: xml delphi delphi-2007 tagname