将XML文件的数据转换为字符串列表C#

将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

以下是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>

2.
1.
3.
4.
现在,我想要以下内容:

  • 包含所有数据类型id的列表(字符串),如上面预览中的“1”和“2”
  • 包含所有内容的列表(字符串),如上面的“2”和“3”
  • 包含所有内容的列表(字符串),如上面的“1”和“4”
对于这样的东西,C#中有内置的简单方法吗?或者有人能帮我回答这个问题吗

  • 乔纳斯

在C#中将类与XML进行转换的最简单方法是

例如,可以创建一个类,该类的成员变量与XML中的标记相对应。当您想要创建XML文件时,可以将该类序列化为XML文件

当您想要读回信息时,可以将XML文件的内容反序列化回您创建的类


这里有一篇更全面的文章:

在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