读取已从记录集转换的 xml
本文关键字:转换 xml 记录 读取 | 更新日期: 2023-09-27 18:32:15
我有以下xml文件..我将记录集转换为xml后获得了它的内容。现在我想要一些特定的价值.我找不到一种方法来做到这一点.
我是 c# 的新手。请帮我吗?
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
<s:AttributeType name='SerialNo' rs:number='1' rs:write='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='0'
rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='c1' rs:name='Response Type'
rs:number='2' rs:write='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255'
rs:precision='0' rs:maybenull='false'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<rs:insert>
<z:row SerialNo='1' c1='1'/>
<z:row SerialNo='2' c1='14'/>
<z:row SerialNo='3' c1='14'/>
<z:row SerialNo='4' c1='3'/>
<z:row SerialNo='5' c1='9'/>
<z:row SerialNo='6' c1='7'/>
<z:row SerialNo='7' c1='6'/>
<z:row SerialNo='8' c1='0'/>
<z:row SerialNo='9' c1='0'/>
</rs:insert>
</rs:data>
</xml>
在上面的xml中,我想遍历下面的标签,并想要序列号和c1中提到的值。
<rs:insert>
<z:row SerialNo='1' c1='1'/>
<z:row SerialNo='2' c1='14'/>
<z:row SerialNo='3' c1='14'/>
<z:row SerialNo='4' c1='3'/>
<z:row SerialNo='5' c1='9'/>
<z:row SerialNo='6' c1='7'/>
<z:row SerialNo='7' c1='6'/>
<z:row SerialNo='8' c1='0'/>
<z:row SerialNo='9' c1='0'/>
</rs:insert>
请帮忙..提前谢谢.
使用 Linq To Xml
XNamespace ns = "#RowsetSchema";
var serialNos = XDocument.Load(fileName)
.Descendants(ns + "row")
.ToDictionary(r => r.Attribute("SerialNo").Value,
r => r.Attribute("c1").Value);
也许是这样的:
var MyC1Nodes = new List<string>();
var MySerialNodes = new List<string>();
var MyXml = new XmlDocument();
MyXml.LoadXml(File.ReadAllText(@"pathOfXml").ToString());
foreach (XmlNode tempSerialNo in MyXml.DocumentElement.SelectNodes("//@SerialNo"))
{
MySerialNodes.Add(tempSerialNo.Value.ToString());
}
foreach (XmlNode tempC1 in MyXml.DocumentElement.SelectNodes("//@c1"))
{
MyC1Nodes.Add(TempC1.Value.ToString());
}
编辑:IV4answer对于使用字典会更好,但也是linq的解决方案:
var MyData = new Dictionary<int, int>();
MyXml.LoadXml(File.ReadAllText(@"pathOfXml").ToString());
var MySerialNodes = MyXml.DocumentElement.SelectNodes("//@SerialNo");
var MyC1Nodes = MyXml.DocumentElement.SelectNodes("//@C1");
If (MyC1Nodes.Count == MySerialNodes.Count)
{
For(int i = 0; i <MySerialNodes.Count; i++)
{
MyData.Add((int)MySerialNodes[i],(int) MyC1Nodes[i]);
}
}