2016-05-10 2 views
-1

Я пробовал способы, как показано ниже, но они не работают, показывая исключение NullReferenceException. Это казалось простым, но некоторые решения с LINQ выглядят сложными, потому что я не знаком с анализом LINQ и XML.C# XML) Как получить значения в пределах определенного тега?

Я хочу только значения, B1, B2, B3 и C1, C2 ..... в R1. (Там вы также R2, R3..so на.)

То, что я пытался это ,

string greenvalue = objDoc.Descendants("R1").First().Element("B1").Value.ToString(); 

и

string bluevalue = objDoc.XPathSelectElement("//ITEM[R1]").Element("B1").Value.ToString(); 

код XML, как показано ниже,

-<RESULT> 
    -<ITEM> 
     -<R1> 
     -<B DESC="product"> 
      <B1> chocolate </B1> 
      <B2> white </B2> 
      <B3> Kisses </B3> 
      <B4> bar type </B4> 
      <B5> 2 $ </B5> 
      <B6>2014-09-26 </B6> 
      <B7>201404418 </B7> 
      </B> 
     -<C DESC="ingredient"> 
      -<CR1> 
       <C1>cacao paste </C1> 
       <C2> concentrated </C2> 
       <C3> 21.69 </C3> 
       <C4> gram </C4> 
      </CR1> 
     </C> 

ответ

1

Ваши попытки коды не сработали, потому что <B1> не является прямым ребенком <R1>. Существует элемент <B>, между которым вы должны рассмотреть.

"Я хочу только значения, B1, B2, B3 и C1, C2 ..... в пределах R1"

Это один из возможных способов:

string bluevalue = (string)objDoc.XPathSelectElement("//R1/B/B1"); 

или эквивалентный LINQ без XPath:

string greenvalue = (string)objDoc.Descendants("R1") 
            .Elements("B") 
            .Elements("B1") 
            .FirstOrDefault(); 
+0

Ох .. Большое вам спасибо! Первый работает отлично. Я пробовал пары часов, но не смог найти подходящий вариант с моим делом. Благодарим вас за отличное знание и поддержку! –

+0

Добро пожаловать! Такой вид ответа :) – har07

+0

Не могли бы вы помочь мне чуть больше ..? Мне также нужно получить значение C1, но (строка) objDoc.XPathSelectElement ("// R1/C/CR1/C1"). не работает .. с NullReferenceException..Я действительно не знаком с структурой XML и подавлен. Пожалуйста, любезно посоветуйте мне еще раз. –

1

Первое, что вам нужно do - разобрать XML-файл на C#, используя класс XmlDocument. то u может ссылаться на теги xml один за другим.

XmlDocument doc = new XmlDocument(); // load document 
doc.Load(Path); 
XmlNodeList nodeList = doc.GetElementsByTagName("R1") 

Затем вы можете получить доступ к узлам и значениям внутри R1.

nodeList[i].ParentNode.Name 
nodeList[i].ChildNodes[x].InnerText 
nodeList[i].ChildNodes[x].Attributes["Id"].Value 
+0

Я знаю, как загрузить XDocument, и я ценю ваши отличные знания и поддержку. Однако другой человек дал правильный ответ раньше. Спасибо ! –

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