Получить значение элемента XML в виде строки - PullRequest
0 голосов
/ 04 мая 2018

Я использую XDocument для загрузки xml и пытаюсь получить значение (например, «-1» под «RCode» внутри элемента <ContextValue>.

XML:

<?xml version="1.0" encoding="UTF-8"?>
<dsContext xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ttContext>
    <ContextName>RCode</ContextName>
    <ContextValue>-1</ContextValue>
  </ttContext>
</dsContext>
 <?xml version="1.0" encoding="UTF-8"?>
<dsMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Messages>
    <MessageNum>CA9001</MessageNum>
    <MessageText>ERROR: End date &gt; Start date. (CA:25)</MessageText>
  </Messages>
</dsMessage>

Я пробовал следующее

XDocument x = XDocument.Parse(xmlstring);
if (x.Root.Elements().Any())
{

string id = "RCode";

XElement codevalue = (from xml2 in x.Descendants("dsContext").Descendants("ttContext") 
                    where xml2.Element("ContextName").Value == id
                    select xml2).FirstOrDefault();
ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + codevalue.ToString() + "');", true);
}

Возвращено «Ссылка на объект не установлена ​​для экземпляра объекта». Как вернуть значение в виде строки или целого числа, чтобы я мог его использовать?

Спасибо, что помогли мне

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете нацелиться на ContextValue непосредственно от потомков документа. Затем оттуда вы можете получить элемент и получить его значение.

XDocument doc = XDocument.Load("foo.xml");
var element = doc.Descendants("ContextValue").FirstOrDefault();
var value = element.Value;
Console.WriteLine(value); // -1

Обратите внимание, ваш пример xml некорректен - не уверен, что вы хотели, чтобы это было так или нет.

...