Чтение имени тега из объекта IXMLDOMDocument2 в Delphi - PullRequest
0 голосов
/ 19 июня 2010

У меня есть что-то вроде этого:

uses MSXML2_TLB;
type TDocumentType = (dtOrder, dtInvoice, dtStatus, dtError); // And a few more, actually
function DetermineDocumentType(doc: IXMLDOMDocument2): TDocumentType;
...

Это должно сделать что-то простое: определить, какой тип XML содержится в параметре doc.XML может быть что-то вроде: <Order>...</Order>, <Invoice>...</Invoice>, <Status>...</Status>, <Error>...</Error> или что-то еще.Внутренняя структура этих файлов очень похожа, поэтому единственный надежный способ определить его тип - получить имя первого тега из XML.Doc.nodeName и Doc.baseName не работают.Я мог бы просто прочитать XML как текст, проанализировать его по коду, чтобы определить тэг, но это грязная уловка, которую я отказываюсь использовать.Поэтому мне нужен метод, который будет возвращать имя тега через соответствующие методы интерфейса IXMLDOMDocument2.Что еще хуже, у меня нет контроля над кодом за пределами этой функции, и, как второй предел, этот корневой тег оказывается нечувствительным к регистру, что делает трюк, подобный использованию selectNode (), неработоспособным.Это может быть проблемой из-за устаревшего кода и плохих решений, которые были приняты в прошлом предыдущими разработчиками.(К счастью, в этом проекте странным кажется только корневой тег.) Кстати, эта функция должна заменить аналогичную функцию, которая хорошо работает на сайте TheDailyWTF.Ранее он считывал XML из интерфейса, полностью преобразовывал его в верхний регистр и, наконец, выполнял много вызовов функции pos () для проверки любого из возможных тегов.Не очень эффективно, тем более что этот код должен обрабатывать несколько тысяч файлов XML ...

Итак, как получить имя тега корневого элемента в объекте типа IXMLDOMDocument2?

1 Ответ

3 голосов
/ 20 июня 2010

Я думаю, что вы ищете

doc.documentElement.nodeName
...