使用xmldocument读取xml
4/12/13 Mrinal xmlTest
我正在尝试使用c#读取上面的xml,但是我在try catch块中得到nullexception可以任何正文建议所需的更改。
static void Main(string[] args) { XmlDocument xd = new XmlDocument(); xd.Load("C:/Users/mkumar/Documents/testcase.xml"); XmlNodeList nodelist = xd.SelectNodes("/testcase"); // get all nodes foreach (XmlNode node in nodelist) // for each node { CommonLib.TestCase tc = new CommonLib.TestCase(); try { tc.name = node.Attributes.GetNamedItem("date").Value; tc.date = node.Attributes.GetNamedItem("name").Value; tc.sub = node.Attributes.GetNamedItem("subject").Value; } catch (Exception e) { MessageBox.Show("Error in reading XML", "xmlError", MessageBoxButtons.OK); }
…….. …..
testcase
元素没有属性。 您应该关注它的子节点:
tc.name = node.SelectSingleNode("name").InnerText; tc.date = node.SelectSingleNode("date").InnerText; tc.sub = node.SelectSingleNode("subject").InnerText;
您可以像这样处理所有节点:
var testCases = nodelist .Cast() .Select(x => new CommonLib.TestCase() { name = x.SelectSingleNode("name").InnerText, date = x.SelectSingleNode("date").InnerText, sub = x.SelectSingleNode("subject").InnerText }) .ToList();
您可以使用LINQ to XML从xml中选择所有testcase
元素并将它们解析为TestCase
实例:
var xdoc = XDocument.Load("C:/Users/mkumar/Documents/testcase.xml"); var testCases = from tc in xdoc.Descendants("testcase") select new CommonLib.TestCase { date = (string)tc.Element("date"), name = (string)tc.Element("name"), sub= (string)tc.Element("subject") };
顺便说一下,你目前只有一个testcase
元素,它是XML文件的根目录。 所以,你可以这样做:
var tc = XElement.Load("C:/Users/mkumar/Documents/testcase.xml"); var testCase = new CommonLib.TestCase { date = (string)tc.Element("date"), name = (string)tc.Element("name"), sub= (string)tc.Element("subject") };
private static void Main(string[] args) { XmlDocument xd = new XmlDocument(); xd.Load("C:\\test1.xml"); XmlNodeList nodelist = xd.SelectNodes("/testcase"); // get all nodes foreach (XmlNode node in nodelist) // for each node { try { var name = node.SelectSingleNode("date").InnerText; var date = node.Attributes.GetNamedItem("name").Value; var sub = node.Attributes.GetNamedItem("subject").Value; } catch (Exception e) { MessageBox.Show("Error in reading XML", "xmlError", MessageBoxButtons.OK); } }
这将工作我测试它@Alex正确的答案
您正在尝试读取属性,而date, name
和subject
不是属性。 它们是子节点。
你的代码应该是这样的
XmlDocument xd = new XmlDocument(); xd.Load("test.xml"); XmlNodeList nodelist = xd.SelectNodes("/testcase"); // get all nodes foreach (XmlNode node in nodelist) // for each node { try { string name = node.SelectSingleNode("name").InnerText; string date = node.SelectSingleNode("date").InnerText; string sub = node.SelectSingleNode("subject").InnerText; } catch (Exception ex) { MessageBox.Show("Error in reading XML", "xmlError", MessageBoxButtons.OK); } }
您的Xml不包含属性。 日期,名称和主题 – 它是测试用例节点的子节点。 试试这个:
... tc.name = node["name"].InnerText; ...
或这个:
... tc.name = node.SelectSingleNode("name").InnerText; ...