对于某些API接口,除了会返回Json格式的数据外,还可能遇到返回的XML格式的数据。
接受信息(无论json还是xml都可以用下面的代码接收数据)
Stream inputstream = Request.InputStream; byte[] b = new byte[inputstream.Length]; inputstream.Read(b, 0, (int)inputstream.Length); string xml= UTF8Encoding.UTF8.GetString(b); 或 Stream postData = Request.InputStream; StreamReader sRead = new StreamReader(postData); string postContent = sRead.ReadToEnd();
解析:
使用XmlDocument是一种基于文档结构模型的方式来读取XML文件.在XML文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树.
最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性
1: xn 代表一个结点 2: xn.Name;//这个结点的名称 3: xn.Value;//这个结点的值 4: xn.ChildNodes;//这个结点的所有子结点 5: xn.ParentNode;//这个结点的父结点
对于只有一级的xml数据结构可以直接这样
//根据xml节点获取对应的值 public string GetXMLNodeValue(string xml, string node) { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XmlElement root = null; root = doc.DocumentElement; XmlNodeList listNodes = root.SelectNodes(node); return listNodes[0].InnerText; }
对于比较复杂的xml数据结构,需要获取所有子节点然后进行遍历
// 得到根节点bookstore XmlNode xn = xmlDoc.SelectSingleNode("root"); // 得到根节点的所有子节点 XmlNodeList xnl = xn.ChildNodes; foreach (XmlNode xn1 in xnl) { //将节点转换为元素,便于得到节点的属性值 XmlElement xe = (XmlElement)xn1; string attr1= xe.GetAttribute("attr1").ToString(); string attr2= xe.GetAttribute("attr2").ToString(); //得到Book节点的所有子节点 XmlNodeList xnl0 = xe.ChildNodes; string childnode1=xnl0.Item(0).InnerText; string childnode2=xnl0.Item(1).InnerText; string childnode3=xnl0.Item(2).InnerText;
温馨提示:
假如xml含有注释,需要在读取xml之前设置忽略文档里面的注释,防止将注释当做节点,导致程序异常
XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true;//忽略文档里面的注释