将XML文件的数据转换为字符串列表C#
以下是XML文件的外观:将XML文件的数据转换为字符串列表C#,c#,xml,C#,Xml,以下是XML文件的外观: <data> <subdata> <datatype id="1" name="data1"> <xdim>2</xdim> <ydim>1</ydim> </datatype> <datatype id="2" name="data2"> <xdim>3</xdim> <y
<data>
<subdata>
<datatype id="1" name="data1">
<xdim>2</xdim>
<ydim>1</ydim>
</datatype>
<datatype id="2" name="data2">
<xdim>3</xdim>
<ydim>4</ydim>
</datatype>
</subdata>
</data>
2.
1.
3.
4.
现在,我想要以下内容:
- 包含所有数据类型id的列表(字符串),如上面预览中的“1”和“2”
- 包含所有
内容的列表(字符串),如上面的“2”和“3” - 包含所有
内容的列表(字符串),如上面的“1”和“4”
- 乔纳斯
这里有一篇更全面的文章:在C#中将类与XML进行转换的最简单方法是 例如,可以创建一个类,该类的成员变量与XML中的标记相对应。当您想要创建XML文件时,可以将该类序列化为XML文件 当您想要读回信息时,可以将XML文件的内容反序列化回您创建的类
这里有一篇更全面的文章:您可以使用后代方法。
此方法读取所有子节点,甚至是节点名称与指定字符串匹配的嵌套节点
var Idstring = MyXml.Descendants("datatype").Select (x=>x.Attribute("Id")).ToList();
var xdimstring = MyXml.Descendants("xdim").Select (x=>x.Value).ToList();
var ydimstring = MyXml.Descendants("ydim").Select (x=>x.Value).ToList();
为了满足你的好奇心:)
这说明了如何从特定的子数据节点获取节点
var Idstring = MyXml.Descendants("Subdata").Descendants("datatype").Select (x=>x.Attribute("Id")).ToList();
var xdimstring = MyXml.Descendants("Subdata").Descendants("xdim").Select (x=>x.Value).ToList();
var ydimstring = MyXml.Descendants("Subdata").Descendants("ydim").Select (x=>x.Value).ToList();
现在假设您有多个子数据,并且只想从第一个子数据读取节点……只需使用第一个linq扩展方法
var Idstring = MyXml.Descendants("Subdata").First().Descendants("datatype").Select (x=>x.Attribute("Id")).ToList();
您可以使用子代方法。
此方法读取所有子节点,甚至是节点名称与指定字符串匹配的嵌套节点
var Idstring = MyXml.Descendants("datatype").Select (x=>x.Attribute("Id")).ToList();
var xdimstring = MyXml.Descendants("xdim").Select (x=>x.Value).ToList();
var ydimstring = MyXml.Descendants("ydim").Select (x=>x.Value).ToList();
为了满足你的好奇心:)
这说明了如何从特定的子数据节点获取节点
var Idstring = MyXml.Descendants("Subdata").Descendants("datatype").Select (x=>x.Attribute("Id")).ToList();
var xdimstring = MyXml.Descendants("Subdata").Descendants("xdim").Select (x=>x.Value).ToList();
var ydimstring = MyXml.Descendants("Subdata").Descendants("ydim").Select (x=>x.Value).ToList();
现在假设您有多个子数据,并且只想从第一个子数据读取节点……只需使用第一个linq扩展方法
var Idstring = MyXml.Descendants("Subdata").First().Descendants("datatype").Select (x=>x.Attribute("Id")).ToList();
这很有效,而且相当简洁:
string xml =
@"<data>
<subdata>
<datatype id=""1"" name=""data1"">
<xdim>2</xdim>
<ydim>1</ydim>
</datatype>
<datatype id=""2"" name=""data2"">
<xdim>3</xdim>
<ydim>4</ydim>
</datatype>
</subdata>
</data>";
var xelem = XElement.Parse(xml);
var allIDs = xelem
.Descendants()
.Where (x => x.Attribute("id") != null)
.Select (x => x.Attribute("id").Value)
.ToList();
var allXdims = xelem
.XPathSelectElements("//xdim")
.Select (x => x.Value)
.ToList();
var allYdims = xelem
.XPathSelectElements("//ydim")
.Select (x => x.Value)
.ToList();
相反。这很有效,而且相当简洁:
string xml =
@"<data>
<subdata>
<datatype id=""1"" name=""data1"">
<xdim>2</xdim>
<ydim>1</ydim>
</datatype>
<datatype id=""2"" name=""data2"">
<xdim>3</xdim>
<ydim>4</ydim>
</datatype>
</subdata>
</data>";
var xelem = XElement.Parse(xml);
var allIDs = xelem
.Descendants()
.Where (x => x.Attribute("id") != null)
.Select (x => x.Attribute("id").Value)
.ToList();
var allXdims = xelem
.XPathSelectElements("//xdim")
.Select (x => x.Value)
.ToList();
var allYdims = xelem
.XPathSelectElements("//ydim")
.Select (x => x.Value)
.ToList();
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(
"<data><subdata><datatype id=\"1\" name=\"data1\"><xdim>2</xdim><ydim>1</ydim></datatype><datatype id=\"2\" name=\"data2\"><xdim>3</xdim><ydim>4</ydim></datatype></subdata></data>");
var nodes = xmlDocument.SelectNodes("//datatype");
var first = new List<string>();
var Second = new List<string>();
var third = new List<string>();
foreach (XmlNode node in nodes)
{
first.Add(node.Attributes["id"].Value);
}
nodes = xmlDocument.SelectNodes("//xdim");
foreach (XmlNode node in nodes)
{
Second.Add(node.InnerText);
}
nodes = xmlDocument.SelectNodes("//ydim");
foreach (XmlNode node in nodes)
{
third.Add(node.InnerText);
}
相反。var xmlDocument=new xmlDocument();
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(
"<data><subdata><datatype id=\"1\" name=\"data1\"><xdim>2</xdim><ydim>1</ydim></datatype><datatype id=\"2\" name=\"data2\"><xdim>3</xdim><ydim>4</ydim></datatype></subdata></data>");
var nodes = xmlDocument.SelectNodes("//datatype");
var first = new List<string>();
var Second = new List<string>();
var third = new List<string>();
foreach (XmlNode node in nodes)
{
first.Add(node.Attributes["id"].Value);
}
nodes = xmlDocument.SelectNodes("//xdim");
foreach (XmlNode node in nodes)
{
Second.Add(node.InnerText);
}
nodes = xmlDocument.SelectNodes("//ydim");
foreach (XmlNode node in nodes)
{
third.Add(node.InnerText);
}
xmlDocument.LoadXml(
"2134");
var nodes=xmlDocument.SelectNodes(“//数据类型”);
var first=新列表();
var Second=新列表();
var third=新列表();
foreach(节点中的XmlNode节点)
{
首先,添加(node.Attributes[“id”].Value);
}
nodes=xmlDocument.SelectNodes(“//xdim”);
foreach(节点中的XmlNode节点)
{
添加(node.InnerText);
}
nodes=xmlDocument.SelectNodes(“//ydim”);
foreach(节点中的XmlNode节点)
{
添加(node.InnerText);
}
var xmlDocument=new xmlDocument();
xmlDocument.LoadXml(
"2134");
var nodes=xmlDocument.SelectNodes(“//数据类型”);
var first=新列表();
var Second=新列表();
var third=新列表();
foreach(节点中的XmlNode节点)
{
首先,添加(node.Attributes[“id”].Value);
}
nodes=xmlDocument.SelectNodes(“//xdim”);
foreach(节点中的XmlNode节点)
{
添加(node.InnerText);
}
nodes=xmlDocument.SelectNodes(“//ydim”);
foreach(节点中的XmlNode节点)
{
添加(node.InnerText);
}
您可以使用:
XDocument doc = XDocument.Load(@"..\myfile.xml");
在XDocument
对象中加载文件
然后使用XDocument
方法创建所需id值的字符串列表:
var ids = (from a in doc.Descendants("subdata").Elements().Attributes("id")
select a.Value).ToList();
var xids = (from e in doc.Descendants("datatype").Elements("xdim")
select e.Value).ToList();
var yids = (from e in doc.Descendants("datatype").Elements("ydim")
select e.Value).ToList();
您可以使用:
XDocument doc = XDocument.Load(@"..\myfile.xml");
在XDocument
对象中加载文件
然后使用XDocument
方法创建所需id值的字符串列表:
var ids = (from a in doc.Descendants("subdata").Elements().Attributes("id")
select a.Value).ToList();
var xids = (from e in doc.Descendants("datatype").Elements("xdim")
select e.Value).ToList();
var yids = (from e in doc.Descendants("datatype").Elements("ydim")
select e.Value).ToList();
试试这样的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication81
{
class Program
{
static void Main(string[] args)
{
string xml =
"<data>" +
"<subdata>" +
"<datatype id=\"1\" name=\"data1\">" +
"<xdim>2</xdim>" +
"<ydim>1</ydim>" +
"</datatype>" +
"<datatype id=\"2\" name=\"data2\">" +
"<xdim>3</xdim>" +
"<ydim>4</ydim>" +
"</datatype>" +
"</subdata>" +
"</data>";
XElement data = XElement.Parse(xml);
var results = data.Descendants("subdata").Elements()
.GroupBy(x => x.Name.LocalName)
.Select(x => new
{
name = x.Key,
value = x.Select(y => (string)y).ToList(),
attributes = x.Attributes()
.Select(y => new {name = y.Name.LocalName, y.Value})
.GroupBy(y => y.name, z => z.Value)
.ToDictionary(y => y.Key, z => z.ToList())
}).ToList();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序81
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串xml=
"" +
"" +
"" +
"2" +
"1" +
"" +
"" +
"3" +
"4" +
"" +
"" +
"";
XElement data=XElement.Parse(xml);
var results=data.substands(“子数据”).Elements()
.GroupBy(x=>x.Name.LocalName)
.选择(x=>new
{
name=x.Key,
value=x.Select(y=>(字符串)y.ToList(),
attributes=x.attributes()
.Select(y=>new{name=y.name.LocalName,y.Value})
.GroupBy(y=>y.name,z=>z.Value)
.ToDictionary(y=>y.Key,z=>z.ToList())
}).ToList();
}
}
}
试试这样的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication81
{
class Program
{
static void Main(string[] args)
{
string xml =
"<data>" +
"<subdata>" +
"<datatype id=\"1\" name=\"data1\">" +
"<xdim>2</xdim>" +
"<ydim>1</ydim>" +
"</datatype>" +
"<datatype id=\"2\" name=\"data2\">" +
"<xdim>3</xdim>" +
"<ydim>4</ydim>" +
"</datatype>" +
"</subdata>" +
"</data>";
XElement data = XElement.Parse(xml);
var results = data.Descendants("subdata").Elements()
.GroupBy(x => x.Name.LocalName)
.Select(x => new
{
name = x.Key,
value = x.Select(y => (string)y).ToList(),
attributes = x.Attributes()
.Select(y => new {name = y.Name.LocalName, y.Value})
.GroupBy(y => y.name, z => z.Value)
.ToDictionary(y => y.Key, z => z.ToList())
}).ToList();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序81
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串xml=
"" +
"" +
"" +
"2" +
"1" +
"" +
"" +
"3" +
"4" +
"" +
"" +
"";
XElement data=XElement.Parse(xml);
var results=data.substands(“子数据”).Elements()
.GroupBy(x=>x.Name.LocalName)
.选择(x=>new