C# - XML子节点到文本框

时间:2014-05-28 11:03:14

标签: c# xml xpath

我无法将子节点文本放入c#中的富文本框中。这是我到目前为止所尝试的:

这是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);

这是我得到的错误:

  

未处理的类型&#39; System.Xml.XPath.XPathException&#39;   发生在System.Xml.dll

中      

其他信息:&#39; DATA_LIST \ Customer&#39;有一个无效的令牌。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

用于选择客户节点的XPath是错误的,它应该是/DATA_LIST/Customer

有关详细信息和示例,请参阅XPath Syntax

答案 1 :(得分: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");