我的xml存储在xml文件中,如下所示
<?xml version="1.0" encoding="utf-8"?>
<metroStyleManager>
<Style>Blue</Style>
<Theme>Dark</Theme>
<Owner>CSRAssistant.Form1, Text: CSR Assistant</Owner>
<Site>System.ComponentModel.Container+Site</Site>
<Container>System.ComponentModel.Container</Container>
</metroStyleManager>
这种方式我正在迭代但是有一些小故障
XmlReader rdr = XmlReader.Create(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + @"\Products.xml");
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element)
{
string xx1= rdr.LocalName;
string xx = rdr.Value;
}
}
它总是变空string xx = rdr.Value;
当元素为style
时,值应该是Blue
,就像在文件中一样,但我总是空着......你能说出原因吗?
另一个要求是我想在<metroStyleManager></metroStyleManager>
任何人都可以帮助以上两点。感谢
答案 0 :(得分:1)
Blue
是Text
节点的值,而不是Element
节点的值。你需要添加另一个if来获取文本节点的值,或者你可以读取当前元素节点的内部xml:
rdr.MoveToContent();
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element)
{
string name = rdr.LocalName;
string value = rdr.ReadInnerXml();
}
}
您还可以使用Linq to Xml获取根子项的名称和值:
var xdoc = XDocument.Load(path_to_xml);
var query = from e in xdoc.Root.Elements()
select new {
e.Name.LocalName,
Value = (string)e
};
答案 1 :(得分:0)
您可以使用XmlDocument
类。
XmlDocument doc = new XmlDocument.Load(filename);
foreach (XmlNode node in doc.ChildNodes)
{
if (node.ElementName == "metroStyleManager")
{
foreach (XmlNode subNode in node.ChildNodes)
{
string key = subNode.LocalName; // Style, Theme, etc.
string value = subNode.Value; // Blue, Dark, etc.
}
}
else
{
...
}
}
答案 2 :(得分:0)
您可以使用XDocument xDoc = XDocument.Load(strFilePath)来加载XML文件。
然后你可以使用
foreach (XElement xeNode in xDoc.Element("metroStyleManager").Elements())
{
//Check if node exist
if (!xeNode.Elements("Style").Any()
//If yes then
xeNode.Value
}
希望它能帮助......
BTW,来自 System.XML.Linq.XDocument