Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将XML转换为列表<;字符串>;还是字符串[]?_C#_Xml_Xml Serialization - Fatal编程技术网

C# 如何将XML转换为列表<;字符串>;还是字符串[]?

C# 如何将XML转换为列表<;字符串>;还是字符串[]?,c#,xml,xml-serialization,C#,Xml,Xml Serialization,如何将以下XML转换为列表或字符串[]: <Ids> <id>1</id> <id>2</id> </Ids> 1. 2. 听起来您更多的是在解析之后,而不是完全的XML序列化/反序列化。如果您可以使用LINQ到XML,这非常简单: using System; using System.Linq; using System.Xml.Linq; public class Test { static voi

如何将以下XML转换为
列表
字符串[]

<Ids>
  <id>1</id>
  <id>2</id>
</Ids>

1.
2.

听起来您更多的是在解析之后,而不是完全的XML序列化/反序列化。如果您可以使用LINQ到XML,这非常简单:

using System;
using System.Linq;
using System.Xml.Linq;

public class Test
{
    static void Main()
    {
        string xml = "<Ids><id>1</id><id>2</id></Ids>";

        XDocument doc = XDocument.Parse(xml);

        var list = doc.Root.Elements("id")
                           .Select(element => element.Value)
                           .ToList();

        foreach (string value in list)
        {
            Console.WriteLine(value);
        }
    }
}
使用系统;
使用System.Linq;
使用System.Xml.Linq;
公开课考试
{
静态void Main()
{
字符串xml=“12”;
XDocument doc=XDocument.Parse(xml);
var list=doc.Root.Elements(“id”)
.Select(元素=>element.Value)
.ToList();
foreach(列表中的字符串值)
{
控制台写入线(值);
}
}
}
事实上,调用
Elements
可以省略参数,因为只有
id
元素,但我想我应该演示如何指定所需的元素


同样,除非我真的需要一个
列表
,否则我通常不会打电话-如果没有它,结果是
IEnumerable
,如果只对它进行一次迭代就可以了。要创建数组,请使用。

此示例将与.NET framework 3.5一起使用:

    System.Xml.Linq.XElement element = System.Xml.Linq.XElement.Parse("<Ids>  <id>1</id>  <id>2</id></Ids>");
    System.Collections.Generic.List<string> ids = new System.Collections.Generic.List<string>();
    foreach (System.Xml.Linq.XElement childElement in element.Descendants("id"))
    {
        ids.Add(childElement.Value);
    }
System.Xml.Linq.XElement元素=System.Xml.Linq.XElement.Parse(“12”);
System.Collections.Generic.List id=新的System.Collections.Generic.List();
foreach(System.Xml.Linq.XElement子元素中的childElement子元素。子元素(“id”))
{
Add(childElement.Value);
}

以下是使用XmlDocument的一种方法:

// A string containing the XML data
string xml = "<Ids><id>1</id><id>2</id></Ids>";
// The list you want to fill
ArrayList list = new ArrayList();

XmlDocument doc = new XmlDocument();
// Loading from a XML string (use Load() for file)
doc.LoadXml(xml); 
// Selecting node using XPath syntax
XmlNodeList idNodes = doc.SelectNodes("Ids/id");
// Filling the list
foreach (XmlNode node in idNodes)
    list.Add(node.InnerText);
//包含XML数据的字符串
字符串xml=“12”;
//您要填写的列表
ArrayList=新建ArrayList();
XmlDocument doc=新的XmlDocument();
//从XML字符串加载(对文件使用Load())
doc.LoadXml(xml);
//使用XPath语法选择节点
XmlNodeList idNodes=doc.SelectNodes(“id/id”);
//填写清单
foreach(idNodes中的XmlNode节点)
添加(node.InnerText);

您可以使用属性类

Properties prop = new Properties();
prop.loadFromXML(stream);
Set set = prop.keySet();

您可以从集合中为每个键访问多个字符串。关键是xml的元素名。

下面是一种使用数据集从xml获取类型化数组的方法。(在本例中为双精度数组)


当然,解析双倍并一直将它们转换回字符串可能被某些程序员视为亵渎。。。即使对我来说,也很难不去想这样浪费资源的事。。。但我想有时候最好还是把另一个拒之门外。。不要强调:)

将字符串数组转换为xml的代码

items是一个字符串数组

items.Aggregate("", (current, x) => current + ("<item>" + x + "</item>"))
items.Aggregate(“,(当前,x)=>current+(“+x+”)

此示例将与.NET framework 4.0配合使用:

列入清单

    List<string> Ids= new List<string>(); 
    Ids= selectedNode.Descendants("Ids").Elements("Id").Select(> x=>x.Value).Where(s =>s!= string.Empty).ToList();

任何类型的集合。 例如:

C:\videotest\file0.txt
C:\videotest\file1.txt

类文件格式
{
公共文件格式(字符串路径)
{
this.path=path;
}
公共字符串完整路径
{
获取{return Path.GetFullPath(Path);}
}
公共字符串文件名
{
获取{return Path.GetFileName(Path);}
}
私有字符串路径;
}
列出文件=
选定节点
.后代(“ID”)
.要素(“Id”)
.选择(x=>newfileformat(x.Value))
.Where(s=>s.FileName!=string.Empty)
.ToList();

这个问题对林克来说太难了:)正如里奇的回答所暗示的,你的回答有些含糊不清。你能说一下你希望清单包含什么吗。有没有可能是ID(“你的例子中的1”和“2”)?你的答案正是我想要的谢谢,虽然我想列出多个答案作为正确答案,但我不能,但你的答案就是我使用的答案。我认为使用ArrayList而不是list会使它与1.x兼容,还有什么东西是2.0或更高版本的吗?真的需要支持1.x吗?与采用2.0和3.x相比,它并不常见。请说明Properties类的全名。它在哪个命名空间中?Properties类表示一组持久的属性。属性可以保存到流中,也可以从流中加载。属性列表中的每个键及其对应的值都是一个字符串。属性列表可以包含另一个属性列表作为其“默认值”;如果在原始属性列表中找不到属性键,则搜索第二个属性列表。
    List<string> Ids= new List<string>(); 
    Ids= selectedNode.Descendants("Ids").Elements("Id").Select(> x=>x.Value).Where(s =>s!= string.Empty).ToList();
    string[] Ids= thisNode
                  .Descendants("Ids")          // Ids element
                  .Elements("Id")              // Id elements
                  .Select(x=>x.Value)          // XElement to string
                  .Where(s =>s!= string.Empty) // must be not empty
                  .ToArray();                  // string to string []
class FileFormat
    {
        public FileFormat(string path)
        {
            this.path = path;
        }
        public string FullPath
        {
            get { return Path.GetFullPath(path); }
        }
        public string FileName
        {
            get { return Path.GetFileName(path); }
        }
        private string path;
    }

List<FileFormat> Files =
        selectedNode
        .Descendants("Ids")
        .Elements("Id")
        .Select(x => new FileFormat(x.Value))
        .Where(s => s.FileName!=string.Empty)
        .ToList();