C# 如何将Xml转换为字符串数组

C# 如何将Xml转换为字符串数组,c#,xml,string,arrays,C#,Xml,String,Arrays,目前,我正在处理的应用程序将XML返回到字符串中 String xml = getData(); 但现在我需要将其转换为字符串数组,Xml将如下所示: <details> <row> <Year>2014</Year> <Person>Bob</Person> </row> <row> <Year>2013</Year> <Perso

目前,我正在处理的应用程序将XML返回到字符串中

String xml = getData();
但现在我需要将其转换为字符串数组,Xml将如下所示:

<details> 
 <row> 
  <Year>2014</Year> 
  <Person>Bob</Person> 
 </row> 
 <row> 
  <Year>2013</Year> 
  <Person>Fred</Person> 
 </row> 
</details> 

2014
上下快速移动
2013
弗莱德
我见过如果XML保存在一个文件中怎么做,但这不是一个选项。 有什么想法吗

我想要一个字典数组或数组列表,其值如下所示: 年复一年


人,人,人

根据本节给出的答案

假设“details”是XmlFile的根元素,并且文件名为“XMLFile1.xml”,则可以使用:

XmlDocument doc = new XmlDocument();
doc.Load("XMLFile1.xml");

var rows = doc.GetElementsByTagName("row").Cast<XmlElement>();
var persons = rows.SelectMany(x => x.GetElementsByTagName("Person")
    .Cast<XmlElement>()).ToArray().Select(x => x.InnerText).ToArray();
var years = rows.SelectMany(x => x.GetElementsByTagName("Year")
    .Cast<XmlElement>()).ToArray().Select(x => x.InnerText).ToArray();
XmlDocument doc=新的XmlDocument();
doc.Load(“XMLFile1.xml”);
var rows=doc.GetElementsByTagName(“行”).Cast();
var persons=rows.SelectMany(x=>x.GetElementsByTagName(“个人”)
.Cast()).ToArray().Select(x=>x.InnerText.ToArray();
变量年份=行。选择多(x=>x.GetElementsByTagName(“年份”)
.Cast()).ToArray().Select(x=>x.InnerText.ToArray();
不要忘记包含Linq名称空间。

您可以这样尝试:

var doc = XDocument.Parse(xml);
var rows = from row in doc.Root.Elements("row") select row;

//array of person
var persons = rows.Select(o => (string) o.Element("Person")).ToArray();
//array of year
var years = rows.Select(o => (string)o.Element("Year")).ToArray();
//you can remove OrderBy part if it isn't necessary
var result = rows.SelectMany(o => o.Elements())
                 .OrderBy(o => o.Name.LocalName)
                 .Select(o => (string) o).ToArray();
如果要在单个数组中获取
中的所有元素,请尝试以下方法:

var doc = XDocument.Parse(xml);
var rows = from row in doc.Root.Elements("row") select row;

//array of person
var persons = rows.Select(o => (string) o.Element("Person")).ToArray();
//array of year
var years = rows.Select(o => (string)o.Element("Year")).ToArray();
//you can remove OrderBy part if it isn't necessary
var result = rows.SelectMany(o => o.Elements())
                 .OrderBy(o => o.Name.LocalName)
                 .Select(o => (string) o).ToArray();

您希望阵列中包含哪些内容?XML的每一行?包含人名的数组?或者其他任何东西?共享您期望的数组格式,从XMLEdited到我试图从中获取的内容。您确定您的xml具有有效的结构吗?您正在声明具有2个属性(名称和值)但没有名称的元素。我可以使用中包含xml的字符串数据类型作为加载的参数吗?否则这将无济于事。是的,您可以在加载方法中传递字符串。请参阅定义
公共静态XDocument加载(TextReader TextReader)
此方法是否可以动态生成,例如,如果在运行时属性数量及其名称未知,则可以生成此方法,但您也必须动态传递属性名称,即,不是对其进行硬编码,而是动态传递。有没有一种在编译时不知道名称“行”或xml结构的方法,我相信有办法。但这取决于您可能拥有的XML结构。试着发布几个示例XML,这样我们就不能很好地硬编码元素名“row”,假设它具有类似的结构,但可能有不同的元素名?好的,如果是这样的话,只需将
元素(“row”)
替换为
元素()
有没有一种不知道名称“row”的方法还是编译时的xml结构?