我有这样的事情:
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()的技巧变得不可行。这恰好是一个问题,因为遗留代码和以前开发人员过去做出的错误决定。 (幸运的是,在这个项目中,只有root标签似乎很奇怪。)
顺便说一下,这个功能是替换一个在TheDailyWTF网站上做得很好的类似功能。它以前会从接口读取XML,将其完全转换为大写,最后执行大量pos()函数调用以检查任何可能的标记。效率不高,特别是因为此代码必须处理数千个XML文件......
那么,如何在IXMLDOMDocument2类型的对象中获取根元素的标记名称?
答案 0 :(得分:3)
我认为你要搜索的是
doc.documentElement.nodeName