2016-04-05 3 views
-1

У меня есть xml-файл, я пытаюсь разобрать полный файл и найти конкретный тег xml (в моем случае я ищу queryString) и когда тег встречается, вытаскивая внутренний текст, соответствующий ему. Я использую XmlDocument и используя XmlDocument.SelectNodes("/stringList").Pull специфический тег xml в XML-файле с использованием XmlDocument

При этом возвращается null. Я что-то упускаю?

XmlDocument xml = new XmlDocument(); 
Jrxml.Load(file_path); 
XmlNodeList xml_nodes = xml.SelectNodes("/stringList"); 
foreach (XmlNode jr_node in xml_nodes) 
{ 
    XmlNode query_node = jr_node.SelectSingleNode("queryString"); 
} 

Хотя исполнение не войти в цикл, как xml_nodes значение null

Xml файла выглядит следующим образом.

<stringList> 
    <property1/> 
    <property2/> 
     <style> 
     <queryString> 
     </queryString> 
     </style> 
    <queryString> 
    </queryString> 
</stringList> 
+0

Как 'Xml' выглядит? –

+0

ли XML-документ содержит пространства имен? –

+0

Да, он содержит пространство имен @KeithHall – Jilna

ответ

1

Если вы ищете только для тега «queryString» Я предлагаю вам использовать метод XmlDocument GetElementsByTagName. Рассмотрим:

using System; 
using System.Xml; 
namespace TestCon 
{ 
    class Program 
    { 
     private static XmlDocument TestDoc; 
     public static void Main(string[] args) 
     { 
      TestDoc = new XmlDocument(); 
      TestDoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ 
        "<stringList>\n"+ 
        "<property1/>\n"+"<property2/>\n"+ 
    "<style>\n"+"<queryString>Who's on fist."+"</queryString>\n"+ 
    "</style>\n"+"<queryString>Who's on second."+"</queryString>\n"+ 
    "</stringList>"); 
      XmlNodeList elemList = TestDoc.GetElementsByTagName("queryString"); 
      foreach (XmlNode foundNode in elemList) 
      { 
       Console.WriteLine(foundNode.InnerText); 
      } 
      Console.Write("Press any key to continue . . . "); 
      Console.ReadKey(true); 
     } 
    } 
} 

вы получите ровно два узла вы ищете:

Who's on first. 
Who's on second. 
Press any key to continue . . . 
+0

Это решило ... Я пропустил перемещение содержимого файла xml в строку. – Jilna

0

Я предпочитаю классы XML/функциональные возможности найти в System.Xml.Linq:

XDocument doc = XDocument.Parse(xmlString); 

foreach (XElement queryString in doc.Descendants("queryString")) 
{ 
    // do something with queryString.Value ... 
} 
0

вы можете использовать XML LINQ, как этот

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string xml = 
       "<root>" + 
       "<stringList>" + 
        "<property1/>" + 
        "<property2/>" + 
         "<style>" + 
         "<queryString>" + 
         "</queryString>" + 
         "</style>" + 
        "<queryString>" + 
        "</queryString>" + 
       "</stringList>" + 
       "</root>"; 
      XDocument doc = XDocument.Parse(xml); 

      var stringList = doc.Descendants("stringList").Select(x => new 
      { 
       property1 = x.Element("property1"), 
       property2 = x.Element("property2"), 
       style = x.Element("style"), 
       queryString = x.Element("queryString") 
      }); 

     } 
    } 
} 
+0

Элементы предопределены в этом, тогда как мое требование состоит в том, что требуемый тег не должен следовать той же структуре. – Jilna

Смежные вопросы