求C#解析XML字符串代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C#解析XML字符串代码相关的知识,希望对你有一定的参考价值。
我已经取到了一个字符串,内容如下:String message="<?xml version="1.0" encoding="UTF-8" ?>
<resultlist>
<row>
<col name="personid">人员编号</col>
<col name="idcard">身份证号</col>
<col name="card_n">卡号</col>
<col name="dna">dna条码号</col>
</row>
<row>
<col name="personid">人员编号</col>
<col name="idcard">身份证号</col>
<col name="card_n">卡号</col>
<col name="dna">dna条码号</col>
</row>
······
</resultlist> ".我想在C#中解析这段XML,取到各个<row></row>中的值,代码应该怎么写?
注:请注意,我已经取到了这段xml的内容放到string中了,不需要再到文件中取了。如果能帮助解决问题再追加20分。
感谢1楼的,再请指教一下,我取到了nodeList 我的row节点的集合。然后再怎么写啊?我如何判断一共有多少个roww啊,以及每个row下的各个节点值怎么取?
xx.LoadXML("这里放你的string");//加载xml
XmlNodeList xxList = xx.GetElementsByTagName("row"); //取得节点名为row的XmlNode集合
foreach (XmlNode xxNode in xxList)
XmlNodeList childList = xxNode.ChildNodes; //取得row下的子节点集合
foreach (XmlNode xxNode in xxList)
xxNode.InnerText; //返回的是col的文字内容
xxNode.Attributes["name"].Value; //col节点name属性值
本回答被提问者采纳 参考技术B XmlNodeList nodeList = doc.SelectNodes("/resultlist/row");
这句会得到所有的row节点,XmlNodeList 有一个Count属性可以得到节点的个数
string 中文名 = null; //<col name="personid">人员编号</col>
string 英文名 = null;
foreach (XmlNode row in nodeList)
foreach (XmlNode col in row.ChildNodes)
英文名 = col.Attributes["name"].Value;
中文名 = col.InnerXml;
我没有调试,你调一下 参考技术C XmlDocument doc = new XmlDocument();
doc.LoadXml("这里放你的string");
XmlNodeList nodeList = doc.SelectNodes("/resultlist/row");
//nodeList 就是你的row节点的集合
解析字符串 XML C# WPF
【中文标题】解析字符串 XML C# WPF【英文标题】:Parse String XML C# WPF 【发布时间】:2014-06-03 17:22:55 【问题描述】:我知道这类问题已被问过很多次,但我没有找到任何可以解决我的问题的方法。这是我的场景,我从服务器 ftp 一个文件(一个 XML 文件)并将它作为一个字节数组接收,然后我将它解码成一个字符串......下面是我的代码。我现在想获取这个字符串并将其转换为 XML。我尝试了很多建议,例如使用 XDocument 的 Parse 方法和 XmlDocument 的 LoadXml ...见下文,但是当我钻入 XDocument 或 XmlDocument 对象时,我只看到两个节点。下面是我在转换字节数组后得到的 xml 示例。
我最终想在数据网格上显示这个 XML 文件,但是由于在将 xmls 字符串加载到 XDocument/XmlDocument 对象时我只得到了两个节点,我显然没有得到我需要的东西。
希望这是有道理的。顺便说一句,我对 WPF 比较陌生,所以如果这是一个新手问题,请原谅我。 :)
string xmlStr = Encoding.UTF8.GetString(FTP.DownLoadFile(remoteFile));
XDocument doc = XDocument.Parse(xmlStr);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr);
XML:
<?xml version="1.0" encoding="UTF-8"?>
<DataBaseUpdate version="CC03.11.003.5_v3">
<inserttfsquery name="^-800*******" chargenumber="*********" length="0"
translateddigits="866*******" objectclass="top|tfsquery" carrierid="0***"
originatingdigits="*" expiration="" dialeddigits="800*******"
/>
<inserttfsquery name="^-855*******" chargenumber="*********" length="0"
translateddigits="800*******" objectclass="top|tfsquery" carrierid="0***"
originatingdigits="*" expiration="" dialeddigits="855*******"
/>
<inserttfsquery name="^-877*******" chargenumber="*********" length="0"
translateddigits="877*******" objectclass="top|tfsquery" carrierid="0***"
originatingdigits="*" expiration="" dialeddigits="877*******"
/>
</DataBaseUpdate>
更多信息: 解码 byte[] 后,我需要的 XML 在字符串中被正确捕获。此时我需要将字符串“转换”为某种 XMl 对象。一旦我有了 XML 对象,我想把它放在 DataSet/DataTable 中,这样我就可以将 ItemSource 设置为我视图中的 gridView,如下所示:
DataSet dataSet = new DataSet();
dataSet.ReadXml(new XmlTextReader(new StringReader(xmlStr)));
DataTable dt = new DataTable();
dt = dataSet.Tables[0];
FileContentDgv.ItemsSource = dt.DefaultView;
【问题讨论】:
如果你能包含实际的字符串,或者你所期望的解析的 XML,那就太好了。 WPF 是 UI(就像 WinForms 是 UI),所以不是正确的标签。这也应该用语言标记。 但那是两个节点。 【参考方案1】:此解决方案可能会有所帮助。
使用 WPF DataGrid 和 System.XML 和 System.XML.Serialization 命名空间。
我保存了您提供的示例 XML 文件并将其加载为字节数组。然后我将 XML 反序列化为对象并使用 inserttfsquery 元素列表作为 DataGrid 的 ItemsSource,您不需要带有 WPF 的数据集/表。
这里是 XAML
<Window x:Class="WPFXMLTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Name="dataGrid"/>
</Grid>
</Window>
代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Serialization;
namespace WPFXMLTest
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
DataBaseUpdate dbUpdate = DataBaseUpdate.FromXML(System.IO.File.ReadAllBytes(@"c:\temp\***.xml"));
if (dbUpdate != null)
this.dataGrid.ItemsSource = dbUpdate.InsertTFSQueryList;
[XmlRoot(ElementName="DataBaseUpdate")]
public class DataBaseUpdate
public DataBaseUpdate()
public static DataBaseUpdate FromXML(byte[] xmlBytes)
DataBaseUpdate dbUpdate = null;
using (MemoryStream ms = new MemoryStream(xmlBytes))
XmlSerializer xs = new XmlSerializer(typeof(DataBaseUpdate));
dbUpdate = xs.Deserialize(ms) as DataBaseUpdate;
return dbUpdate;
[XmlElement(ElementName="inserttfsquery")]
public List<InsertTFSQuery> InsertTFSQueryList get; set;
public class InsertTFSQuery
public InsertTFSQuery()
[XmlAttribute(AttributeName = "name")]
public string Name get; set;
[XmlAttribute(AttributeName = "chargenumber")]
public string Chargenumber get; set;
[XmlAttribute(AttributeName = "length")]
public string Length get; set;
[XmlAttribute(AttributeName = "translateddigits")]
public string Translateddigits get; set;
[XmlAttribute(AttributeName = "objectclass")]
public string Objectclass get; set;
[XmlAttribute(AttributeName = "carrierid")]
public string Carrierid get; set;
[XmlAttribute(AttributeName = "originatingdigits")]
public string Originatingdigits get; set;
[XmlAttribute(AttributeName = "expiration")]
public string Expiration get; set;
[XmlAttribute(AttributeName = "dialeddigits")]
public string Dialeddigits get; set;
【讨论】:
感谢 jiversion,您的方法比处理数据集/表要干净得多。我继续将我的实施更改为您的建议并且它有效。在我更改它之前,虽然我使用了这个 var ReportElements = new List以上是关于求C#解析XML字符串代码的主要内容,如果未能解决你的问题,请参考以下文章