代码之家  ›  专栏  ›  技术社区  ›  Wim ten Brink

从Delphi中的IxmldomDocument2对象读取标记名

  •  0
  • Wim ten Brink  · 技术社区  · 15 年前

    我有这样的东西:

    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()这样的技巧不可行。这是一个问题,因为以前的开发人员做过遗留代码和错误的决策。(幸运的是,在这个项目中只有根标签看起来很奇怪。) 顺便说一句,这个函数是用来替换在dailywtf站点上运行良好的类似函数。It previously would read the XML from the interface, convert it completely to uppercase and finally do a lot of pos() function calls to check for any of the possible tags. 效率不是很高,特别是因为这段代码必须处理几千个XML文件…

    那么,如何在类型为ixmldomdocument2的对象中获取根元素的标记名呢?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Stijn Sanders    15 年前

    我想你要找的是

    doc.documentElement.nodeName
    
    推荐文章