C#如何从ASMX返回的XML字符串中提取<urun>和<fiyat>节点内容
实现方案
首先需要注意你提供的XML存在默认命名空间http://tempuri.org/,节点匹配时必须带上该命名空间,否则会出现读取不到内容的问题。
方案1:使用XmlReader实现(适配你当前已使用XmlReader的场景)
using System.Xml; List<string> urunList = new List<string>(); List<string> fiyatList = new List<string>(); string defaultNs = "http://tempuri.org/"; // 此处替换为你自己的XmlReader实例,若读取接口响应流可直接传流到XmlReader.Create using (XmlReader reader = XmlReader.Create("你的XML文件路径/接口响应流")) { while (reader.Read()) { // 匹配命名空间下的string节点 if (reader.NodeType == XmlNodeType.Element && reader.LocalName == "string" && reader.NamespaceURI == defaultNs) { // 获取父节点名称判断所属分类 reader.MoveToParent(); string parentNodeName = reader.LocalName; reader.MoveToElement(); // 回到当前string节点 string content = reader.ReadElementContentAsString(); if (parentNodeName == "urun") { urunList.Add(content); } else if (parentNodeName == "fiyat") { fiyatList.Add(content); } } } }
方案2:使用XDocument实现(代码更简洁,推荐)
如果允许使用LINQ to XML,代码可读性和开发效率更高:
using System.Xml.Linq; XDocument xmlDoc = XDocument.Load("你的XML文件路径/接口响应流"); XNamespace defaultNs = "http://tempuri.org/"; // 提取urun下所有字符串 List<string> urunList = xmlDoc.Descendants(defaultNs + "urun") .Elements(defaultNs + "string") .Select(node => node.Value) .ToList(); // 提取fiyat下所有字符串 List<string> fiyatList = xmlDoc.Descendants(defaultNs + "fiyat") .Elements(defaultNs + "string") .Select(node => node.Value) .ToList();
内容的提问来源于stack exchange,提问作者NycroX
相关产品推荐
相关产品推荐

