Как выбрать корневой узел XML, когда корневой узел имеет атрибут? - PullRequest
3 голосов
/ 02 мая 2011

Я пытаюсь выбрать все дочерние узлы корневого узла документа XML с помощью запроса XPath.

Мой XML-файл выглядит примерно так:

<?xml version="1.0" encoding="UTF-8" ?> 
<root>
    <automotive_industry>
        <automotive /> 
        <rail_global_services /> 
    </automotive_industry>
</root>

AND

<?xml version="1.0" encoding="UTF-8" ?> 
<root xmlns="http://www.my_department.my_company.com/project_name">
    <automotive_industry>
        <automotive /> 
        <rail_global_services /> 
    </automotive_industry>
    </root>

C # Код для выбора корневого узла выглядит следующим образом:

XmlDocument gazetteDocument = new XmlDocument();
gazetteDocument.Load(xmlFilePath);
XmlNodeList allNodes = gazetteDocument.SelectNodes("root");

Этот код работает нормально, он выбирает все дочерние узлы корневого узла, когда корневой узел не имеет никакого атрибута, то есть он работает для 1-го XML-файла, но не работает для 2-го XML-файла, поскольку 2-й файл имеет атрибут xmlns.

Кто-нибудь знает, как выбрать все дочерние узлы корневого узла, когда корневой узел имеет атрибуты ??

РЕДАКТИРОВАТЬ: Я нашел один запрос XPath: /* Этот запрос выбираеткорневой узел независимо от того, имеет ли он какой-либо атрибут или нет.После того, как корневой узел выбран, я могу перебрать все его дочерние узлы.

Ответы [ 3 ]

3 голосов
/ 02 мая 2011

Хотя с пространством имен в вашем XML-документе все в порядке, его нужно использовать в вашем SelectNodes.Используйте этот код для вашего второго XML:

XmlDocument gazetteDocument = new XmlDocument();
gazetteDocument.Load(xmlFilePath);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(gazetteDocument.NameTable);
nsmgr.AddNamespace("ns", "http://www.my_department.my_company.com/project_name");
XmlNodeList allNodes = gazetteDocument.SelectNodes("ns:root", nsmgr);

Лучшим способом было бы использовать XDocument и соответствующие классы.С ними намного проще работать.

0 голосов
/ 14 декабря 2018

Вы можете использовать метод GetElementsByTagName, приведенный ниже, фрагмент моего кода

XmlDocument gazetteDocument = new XmlDocument();
gazetteDocument.Load(xmlFilePath);
XmlNodeList allNodes = gazetteDocument.GetElementsByTagName("root");
0 голосов
/ 03 мая 2011

Я не знаю старых xml-методов C #, но вы всегда можете открыть файл для чтения в виде обычного текста, а затем прочитать на первом узле и проанализировать его как вам угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...