2013-05-08 7 views
0

xml исходит из URL-адреса, и все, что мне нужно, это вытащить из него строку «N0014E1». Я не уверен, почему этот код не работает. Я поставил попробовать блок вокруг него, и я получаю "Корневой уровень данных недействителен"Вытягивание строки из xml

XML:

<obj is="c2g:Network " xsi:schemaLocation="http://obix.org/ns/schema/1.0/obi/xsd" href="http://192.168.2.230/obix/config/"> 
    <ref name="N0014E1" is="c2g:LOCAL c2g:Node"xsi:schemaLocation="http://obix.org/ns/sc/1.0/obix/xsd" href="N0014E1/"></ref> 
</obj> 

C# код:

public static string NodePath = "http://" + MainClass.IpAddress + ObixPath; 


    public static void XMLData() 
    { 
     XmlDocument NodeValue = new XmlDocument(); 
     NodeValue.LoadXml(NodePath); 


     var nodes = NodeValue.SelectNodes(NodePath); 

     foreach (XmlNode Node in nodes) 
     { 
      HttpContext.Current.Response.Write(Node.SelectSingleNode("//ref name").Value); 
      Console.WriteLine(Node.Value); 
     } 

     //Console.WriteLine(Node); 
     Console.ReadLine(); 
    } 
+1

Похоже, что между 'obj' и' is' должно существовать пробелы? – zimdanen

+1

Это все XML? Если это так, это недопустимый XML, поэтому вы получаете ошибку. Начальный тег - objis, а закрывающий тег - obj - должен совпадать стартовый и закрывающий теги. – Tim

+0

есть пробел между obj и есть, он просто не копировал, извините. и да, это вся xml-страница. – kevintdiy

ответ

0

Ваших SelectNodes и SelectSingleNode команд неверны. Оба ожидают, что строка xpath будет идентифицировать узел.

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

string xml = @"<obj is=""c2g:Network "" href=""http://192.168.2.230/obix/config/""><ref name=""N0014E1"" is=""c2g:LOCAL c2g:Node"" href=""N0014E1/""></ref></obj>"; 

XmlDocument NodeValue = new XmlDocument(); 
NodeValue.LoadXml(xml); 
XmlNode r = NodeValue.SelectSingleNode("//ref[@name]"); 
if (r != null) 
{ 
    System.Diagnostics.Debug.WriteLine(r.Attributes["name"].Value); 
} 

Кроме того, обратите внимание, что LoadXml метод просто загружает строку XML; он не будет загружаться с удаленного URL-адреса.

Поскольку @kevintdiy указал, что ваш xml не совсем корректен. В приведенном выше примере я удалил ссылку xsi, поскольку вам не хватает определения для нее.

Если у вас есть доступ к исходному xml, удалите ссылку на xsi, если это не требуется или добавьте определение для корневого узла.

Если это невозможно, вы можете захотеть использовать регулярное выражение или другие методы на основе строк для получения значения.

+0

, хотя его недействительный xml? – kevintdiy

+0

@kevintdiy вы действительно правы, ему не хватает определения для 'xsi'. Обновлен мой ответ. – Kami

+0

ok, у меня нет доступа к изменению недействительного xml. Вы предлагаете использовать поиск строки с помощью подстановочного знака? – kevintdiy