XmlNodeList (почему это пусто),

Используя Присоединение Visual Studio

  1. отладчик к процессу (например, запускаются с отладки или Отладки> Присоединение к процессу)
  2. При отладке, покажите окно Modules (Отладка> Windows> Модули)

, Это сообщает подробности о каждом блоке, домене приложения и имеет несколько опций загрузить символы (т.е. pdb файлы, которые содержат отладочную информацию).

enter image description here

Используя Проводник Процесса

, Если Вы хотите внешний инструмент, можно использовать , Проводник Процесса (бесплатное программное обеспечение, опубликованное Microsoft)

, Нажимает на процесс, и это покажет список со всеми используемыми блоками. Инструмент довольно хорош, поскольку он показывает другую информацию, такую как дескрипторы файлов и т.д.

Программно

Проверка это ТАК вопрос, который объясняет, как сделать это.

5
задан sschnake 20 October 2009 в 05:42
поделиться

3 ответа

Ответ пользователя marc_s действительно правильный. Вам нужно обратить внимание на пространства имен XML. Однако его пример кода не будет работать непосредственно для вашего примера. Вот полный пример, который работает с предоставленным вами XML (хотя мне пришлось его очистить ... в нем отсутствовал закрывающий тег для атрибутов ).

string xmlData = 
@"<?xml version='1.0' encoding='utf-8'?>
  <StructureResponse
     xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
     xmlns:xsd='http://www.w3.org/2001/XMLSchema'
     xmlns='http://nts-de-osm1-pxc/webservices/'>
    <consolidatedItems xsi:nil='true' xmlns='http://systinet.com/wsdl/com/osm/webservices/service/' />
    <rootItem xsi:type='Part' xmlns='http://systinet.com/wsdl/com/osm/webservices/service/'>
      <attributes>
        <Attribute>
          <dataDictionary xsi:nil='true' />
          <dataType>string</dataType>
          <displayName>IDENT_NR</displayName>
          <key>true</key>
          <name>IDENT_NR</name>
          <searchable>true</searchable>
          <userAttribute>true</userAttribute>
          <value>9662744</value>
        </Attribute>
        <Attribute>
          <dataDictionary xsi:nil='true' />
          <dataType>string</dataType>
          <displayName>AI</displayName>
          <key>true</key>
          <name>AI</name>
          <searchable>true</searchable>
          <userAttribute>true</userAttribute>
          <value>00</value>
        </Attribute>
      </attributes>
      </rootItem>
  </StructureResponse>";

XmlDocument document = new XmlDocument();
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(document.NameTable);
namespaceManager.AddNamespace("a", "http://nts-de-osm1-pxc/webservices/");
namespaceManager.AddNamespace("b", "http://systinet.com/wsdl/com/osm/webservices/service/");
document.LoadXml(xmlData);
XmlNodeList nodes = document.SelectNodes("/a:StructureResponse/b:rootItem/b:attributes/b:Attribute", namespaceManager);
// 'nodes' contains 2 items now, as expected

Я предлагаю еще немного изучить Пространства имен XML. Попробуйте просмотреть "Часто задаваемые вопросы о пространствах имен XML" Рональда Бурре .

3
ответ дан 13 December 2019 в 19:30
поделиться

Вы не учитываете пространство имен XML ( xmlns = "http: // nts-de -osm1-pxc / webservices / ") в документе!

Хорошо, у вас даже есть два отдельных пространства имен - обновлен мой образец.

Попробуйте следующее:

XmlDocument document = new XmlDocument();
document.Load(xmlpath);    

XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable);
mgr.AddNamespace("ns", "http://nts-de-osm1-pxc/webservices/"); 
mgr.AddNamespace("root", "http://systinet.com/wsdl/com/osm/webservices/service/");

XmlNodeList nodes = document.SelectNodes("/ns:StructureResponse/root:rootItem/root:attributes/root:Attribute", mgr);

Marc

8
ответ дан 13 December 2019 в 19:30
поделиться

Try:

XmlNodeList nodes = document.SelectNodes("./StructureResponse/rootItem/attributes");

0
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: