XDocument return 所有元素名称和值到两个单独的列表
XDocument return all element names and values to two separate lists
我有一个 XML 文档,如下所示:
<Settings>
<!-- Comment1 -->
<A> 1 </A>
<!-- Comment2 -->
<B> 2 </B>
<!-- Comment3 -->
<C> 3 </C>
<!-- Comment4 -->
<D> 4 </D>
</Settings>
如何将元素名称 (A,B,C,D) 添加到一个列表,并将元素值 (1,2,3,4) 添加到另一个列表。请注意,实际上我正在处理的 XML 文件有超过 1000 多行代码,因此我需要一种更有效的方法,而不是将每个值和元素一个一个地拉出并将其添加到列表中...
您可以试试这个代码。
class Program
{
static void Main(string[] args)
{
//Declare and load your xml file
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("XMLFile.xml");
//Instatiate the object where you want to store the list values
XMLData xmlData = new XMLData();
xmlData.listKeys = new List<string>();
xmlData.listValues = new List<string>();
//Pick the settings parent node
XmlNode xmlSettingsNode = xmlDoc.FirstChild;
//Loop through the list and add name and values to list
foreach (XmlNode xmlNode in xmlSettingsNode.ChildNodes)
{
//Ignore commented lines
if (xmlNode.NodeType != XmlNodeType.Comment)
{
xmlData.listKeys.Add(xmlNode.Name);
xmlData.listValues.Add(xmlNode.InnerText);
}
}
}
}
//Data model for storing list data
public class XMLData
{
public List<string> listKeys { get; set; }
public List<string> listValues { get; set; }
}
使用 LinqToXML 将 Xml 的一部分解析为字典 LinqToXML 载入您的 Xdocument。
Select 设置下的所有内容。
枚举这些元素并使它们成为字典。
如果有重复元素,将ToDictionary
替换为Select
。
string input = @"<root>
<Settings>
<A> 1 </A>
<B> 2 </B>
<C> 3 </C>
<D> 4 </D>
</Settings>
<Hello>World</Hello>
<Foo>Bar</Foo>
</root>";
XDocument xdoc = XDocument.Parse(input);
var result = xdoc.Descendants("Settings")
.Elements()
.ToDictionary(
el => el.Name.LocalName,
el => el.Value
);
结果:
Dumping object(System.Collections.Generic.Dictionary`2[String,String])
[
[A, 1 ]
,
[B, 2 ]
,
[C, 3 ]
,
[D, 4 ]
]
正在访问类似 settings["A"]
的值。
注意:这里的字典是“[String,String]
”,但您可以转换该值以满足您的需要。
我有一个 XML 文档,如下所示:
<Settings>
<!-- Comment1 -->
<A> 1 </A>
<!-- Comment2 -->
<B> 2 </B>
<!-- Comment3 -->
<C> 3 </C>
<!-- Comment4 -->
<D> 4 </D>
</Settings>
如何将元素名称 (A,B,C,D) 添加到一个列表,并将元素值 (1,2,3,4) 添加到另一个列表。请注意,实际上我正在处理的 XML 文件有超过 1000 多行代码,因此我需要一种更有效的方法,而不是将每个值和元素一个一个地拉出并将其添加到列表中...
您可以试试这个代码。
class Program
{
static void Main(string[] args)
{
//Declare and load your xml file
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("XMLFile.xml");
//Instatiate the object where you want to store the list values
XMLData xmlData = new XMLData();
xmlData.listKeys = new List<string>();
xmlData.listValues = new List<string>();
//Pick the settings parent node
XmlNode xmlSettingsNode = xmlDoc.FirstChild;
//Loop through the list and add name and values to list
foreach (XmlNode xmlNode in xmlSettingsNode.ChildNodes)
{
//Ignore commented lines
if (xmlNode.NodeType != XmlNodeType.Comment)
{
xmlData.listKeys.Add(xmlNode.Name);
xmlData.listValues.Add(xmlNode.InnerText);
}
}
}
}
//Data model for storing list data
public class XMLData
{
public List<string> listKeys { get; set; }
public List<string> listValues { get; set; }
}
使用 LinqToXML 将 Xml 的一部分解析为字典 LinqToXML 载入您的 Xdocument。
Select 设置下的所有内容。
枚举这些元素并使它们成为字典。
如果有重复元素,将ToDictionary
替换为Select
。
string input = @"<root>
<Settings>
<A> 1 </A>
<B> 2 </B>
<C> 3 </C>
<D> 4 </D>
</Settings>
<Hello>World</Hello>
<Foo>Bar</Foo>
</root>";
XDocument xdoc = XDocument.Parse(input);
var result = xdoc.Descendants("Settings")
.Elements()
.ToDictionary(
el => el.Name.LocalName,
el => el.Value
);
结果:
Dumping object(System.Collections.Generic.Dictionary`2[String,String])
[
[A, 1 ]
,
[B, 2 ]
,
[C, 3 ]
,
[D, 4 ]
]
正在访问类似 settings["A"]
的值。
注意:这里的字典是“
[String,String]
”,但您可以转换该值以满足您的需要。