C # - XML дочерние узлы в текстовое поле

1

У меня возникли проблемы с помещением текста дочернего узла в текстовое поле в С#. Вот что я пробовал до сих пор:

Вот XML файл:

<DATA_LIST>
  <Customer>
    <Full_Name>TEST</Full_Name>
    <Total_Price>100</Total_Price>
    <Discounts>20</Discounts>
  </Customer>
</DATA_LIST>

Код

//Loads XML Document
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
XmlDocument xDoc = new XmlDocument();
xDoc.Load(path + "\\Origami - User\\info.xml");

//My attempt at selecting a child node and making it a string
XmlNode xNode = xDoc.SelectSingleNode("DATA_LIST\\Customer");
string TotalPriceString = xNode.SelectSingleNode("Total_Price").InnerText;
txtLogBox.AppendText("test: " + TotalPriceString);

Это ошибка, которую я получаю:

Необработанное исключение типа "System.Xml.XPath.XPathException" произошло в System.Xml.dll

Дополнительная информация: "DATA_LIST\Customer" имеет недопустимый токен.

Любая помощь будет большой.

Теги:
xpath

2 ответа

1

Ваш XPath для выбора узла Customer ошибочен, он должен быть /DATA_LIST/Customer

См. Синтаксис XPath для получения более подробной информации и примеров.

  • 0
    Какая глупая ошибка. Немного подправил и теперь работает. Спасибо
1

Вы не можете использовать обратную косую черту в XPath. Вместо этого используйте косую черту:

XmlNode xNode = doc.SelectSingleNode("DATA_LIST/Customer");
string TotalPriceString = xNode.SelectSingleNode("Total_Price").InnerText;

Вы можете использовать один XPath для получения цены:

 string totalPrice =  
    doc.SelectSingleNode("DATA_LIST/Customer/Total_Price").InnerText;

Другое предложение - использование LINQ to XML. Вы можете получить цену как номер

var xdoc = XDocument.Load(path_to_xml);
int totalPrice = (int)xdoc.XPathSelectElement("DATA_LIST/Customer/Total_Price");

Или без XPath:

int totalPrice = (int)xdoc.Root.Element("Customer").Element("Total_Price");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню