2014-07-11 7 views
0

Я потратил столько времени на это уже, но не могу получить значение атрибута NTE. Кто-то может помочь?Невозможно получить значение атрибута с помощью C# XPath

C#

 StreamReader sr = new StreamReader(resp.GetResponseStream()); 
     XPathDocument xmlDoc = new XPathDocument(sr); // holds xml document 
     XPathNavigator xmlNav = xmlDoc.CreateNavigator(); //evaluates XPath expressions 
     XPathNodeIterator node = xmlNav.Select("/DATA2SC/CALL"); 
     string dne = xmlNav.GetAttribute("NTE", ""); 

     Console.WriteLine(dne); 
     sr.Close(); 

XML-

<?xml version="1.0"?> 
<DATA2SC PIN="00000"> 
    <CALL 
    TR_NUM="00000001" 
    STATUS="WAITING_FOR_APPROVAL" 
    NTE="$15.00"> 
     <PROBLEM> 
      Text 
     </PROBLEM> 
    </CALL> 
</DATA2SC> 

ответ

0

Вы можете попробовать этот код, пожалуйста?

я уже проверить и это работа

StreamReader sr = new StreamReader("c:\\x.xml"); 
    XPathDocument xmlDoc = new XPathDocument(sr); // holds xml document 
    XPathNavigator xmlNav = xmlDoc.CreateNavigator(); //evaluates XPath expressions 


    var node = xmlNav.SelectSingleNode("/DATA2SC/CALL"); 
    string dne = node.GetAttribute("NTE", ""); 

    Console.WriteLine(dne); 

ИЛИ

XDocument docXmlWorld = XDocument.Load("c:\\x.xml"); 
    foreach (var node1 in docXmlWorld.Descendants("DATA2SC")) 
    { 
     foreach (var node2 in node1.Descendants("CALL")) 
     { 
      string dne = node2.Attribute("NTE").Value; 
      Console.Out.WriteLine(dne); 
     } 
    } 

Или вы можете сделать, как это тоже:

XDocument docXmlWorld = XDocument.Load("c:\\x.xml"); 
    //Get the first child => [DATA2SC] 
    XElement elementNodeDATA2SC = docXmlWorld.Element("DATA2SC"); 
    //Get the first child => [CALL] 
    XElement elementNodeCALL = elementNodeDATA2SC.Element("CALL"); 
    //Get the attribute NTE from [CALL] node 
    string dne = elementNodeCALL.Attribute("NTE").Value; 
    Console.Out.WriteLine(dne); 
+0

Это работает, спасибо. Похоже, моя проблема в другом месте. Я загружаю xml-контент в потоковый считыватель. Вот где моя проблема :( – haosmark

0

Select метод возвращает коллекцию всех узлов с указанным XPath.

Вы можете использовать SelectSingleNode, чтобы выбрать первый узел.

var node = xmlNav.SelectSingleNode("/DATA2SC/CALL"); 
    string dne = node.GetAttribute("NTE", ""); 
+0

Я попытался с помощью SelectSingleNode перед тем, как хорошо, к сожалению, это Безразлично Не работай. – haosmark

+0

@GvS => вы делаете ошибку, она должна быть => строка dne = node.GetAttribute ("NTE", ""); –

+0

@MehdiBugnard, да, вы правы, это была ошибка, скрывающаяся на виду. – GvS

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