如何使用C#循环遍历XML文件中的子项?
我可以获得要显示的版本日期和版本号,但是对于剩余的信息,我希望它输出元素名,后跟标记中的信息。最后,我想把它写成:如何使用C#循环遍历XML文件中的子项?,c#,xml,xml-parsing,C#,Xml,Xml Parsing,我可以获得要显示的版本日期和版本号,但是对于剩余的信息,我希望它输出元素名,后跟标记中的信息。最后,我想把它写成: versionDate: 2011-10-04 versionNumber: 1.0 FirstName: Bob LastName: Johnson PhoneNumber: 123-456-7890 FaxNumber: 111-111-1111 EmailAddress: bjohnson@aol.com Gender: M FirstName: Sue LastName
versionDate: 2011-10-04
versionNumber: 1.0
FirstName: Bob
LastName: Johnson
PhoneNumber: 123-456-7890
FaxNumber: 111-111-1111
EmailAddress: bjohnson@aol.com
Gender: M
FirstName: Sue
LastName: Smith
PhoneNumber: 987-654-3210
FaxNumber: 222-222-2222
EmailAddress: ssmith@comcast.net
Gender: F
相反,它显示以下内容:
versionDate: 2011-10-04
versionNumber: 1.0
versionDate#text - 2011-10-04Contact info: False#text - 2011-10-04versionNumber#text - 2011-10-04Contact info: False#text - 2011-10-04ContactFirstName - 2011-10-04Contact info: False#text - 2011-10-04ContactFirstName - 2011-10-04Contact info: False#text - 2011-10-04ContactFirstName - 2011-10-04Contact info: False#text - 2011-10-04ContactFirstName - 2011-10-04Contact info: False#text - 2011-10-04ContactFirstName - 2011-10-04Contact info:
我试着制作另一个XmlNodeList,它是孩子的孩子,但它不喜欢语法,所以我需要知道如何进入下一个信息层次
我在下面附上了XML和C#文件
<Contacts>
<versionDate>2011-10-04</versionDate>
<versionNumber>1.0</versionNumber>
<Contact Gender ="M">
<FirstName>Bob</FirstName>
<LastName>Johnson</LastName>
<PhoneNumber>123-456-7890</PhoneNumber>
<FaxNumber>111-111-1111</FaxNumber>
<EmailAddress>bjohnson@aol.com</EmailAddress>
</Contact>
<Contact Gender ="F">
<FirstName>Sue</FirstName>
<LastName>Smith</LastName>
<PhoneNumber>987-654-3210</PhoneNumber>
<FaxNumber>222-222-2222</FaxNumber>
<EmailAddress>ssmith@comcast.net</EmailAddress>
</Contact>
</Contacts>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string results = "";
private void button1_Click(object sender, EventArgs e)
{
string fileName = Application.StartupPath + "\\XMLFile1.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlElement elm = xmlDoc.DocumentElement;
results += elm.FirstChild.Name + ": " + elm.FirstChild.InnerText + Environment.NewLine;
results += elm.FirstChild.NextSibling.Name + ": " + elm.FirstChild.NextSibling.InnerText + Environment.NewLine;
XmlNodeList contactInfo = elm.ChildNodes;
for (int count = 0; count < contactInfo.Count; count++)
{
results += (contactInfo[count].Name);
results += (contactInfo[count].FirstChild.Name + " - " + contactInfo[0].FirstChild.InnerText);
results += ("Contact info: " + contactInfo[0].FirstChild.HasChildNodes.ToString());
XmlNodeList contactProperties = contactInfo[0].ChildNodes;
for (int counter = 0; counter < contactProperties.Count; counter++)
{
results += (contactProperties[counter].Name + " - " + contactProperties[counter].InnerText);
}
}
textBox1.Text += results;
}
}
2011-10-04
1
上下快速移动
约翰逊
123-456-7890
111-111-1111
bjohnson@aol.com
控告
史密斯
987-654-3210
222-222-2222
ssmith@comcast.net
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
字符串结果=”;
私有无效按钮1\u单击(对象发送者,事件参数e)
{
字符串文件名=Application.StartupPath+“\\XMLFile1.xml”;
XmlDocument xmlDoc=新的XmlDocument();
Load(文件名);
xmlement elm=xmlDoc.DocumentElement;
结果+=elm.FirstChild.Name+”:“+elm.FirstChild.InnerText+Environment.NewLine;
结果+=elm.FirstChild.NextSibling.Name+”:“+elm.FirstChild.NextSibling.InnerText+Environment.NewLine;
XmlNodeList contactInfo=elm.ChildNodes;
对于(int count=0;count
我们将非常感谢您的任何帮助!谢谢大家! 递归应该有效:
public string CompileResults(XElement e)
{
string retVal = String.Format("{0}:{1} ", e.Name, e.Value);
foreach (XAttribute xa in e.Attributes())
retVal += String.Format("{0}:{1} ", xa.Name, xa.Value);
foreach (XElement xe in e.Elements())
retVal += CompileResults(xe); ;
return retVal;
}
private void button1_Click(object sender, EventArgs e)
{
string fileName = Application.StartupPath + "\\XMLFile1.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
string results = CompileResults(xmlDoc.FirstChild);
}
递归应该可以工作:
public string CompileResults(XElement e)
{
string retVal = String.Format("{0}:{1} ", e.Name, e.Value);
foreach (XAttribute xa in e.Attributes())
retVal += String.Format("{0}:{1} ", xa.Name, xa.Value);
foreach (XElement xe in e.Elements())
retVal += CompileResults(xe); ;
return retVal;
}
private void button1_Click(object sender, EventArgs e)
{
string fileName = Application.StartupPath + "\\XMLFile1.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
string results = CompileResults(xmlDoc.FirstChild);
}
我会这样做:
public static void DumpXml(XElement root, TextWriter writer)
{
if (root.HasElements)
{
foreach (var child in root.Elements())
{
DumpXml(child, writer);
}
}
else
{
writer.WriteLine("{0}: {1}", root.Name, root.Value);
}
foreach (var attr in root.Attributes())
{
writer.WriteLine("{0}: {1}", attr.Name, attr.Value);
}
}
然后使用它:
var doc = XDocument.Load(xmlPath);
var writer = new StringWriter();
DumpXml(doc.Root, writer);
var result = writer.ToString();
我会这样做:
public static void DumpXml(XElement root, TextWriter writer)
{
if (root.HasElements)
{
foreach (var child in root.Elements())
{
DumpXml(child, writer);
}
}
else
{
writer.WriteLine("{0}: {1}", root.Name, root.Value);
}
foreach (var attr in root.Attributes())
{
writer.WriteLine("{0}: {1}", attr.Name, attr.Value);
}
}
然后使用它:
var doc = XDocument.Load(xmlPath);
var writer = new StringWriter();
DumpXml(doc.Root, writer);
var result = writer.ToString();
如果你打算使用一个通用的方法,就应该考虑StringBuilder。如果你想从中使用一个通用的方法,应该考虑一下StringBuilder。我试着格式化你的输出,但是我不太确定确切的输出是什么样子。请编辑并格式化输出列表。我试图格式化您的输出,但我有点不确定确切的输出是什么样子的。请编辑并格式化输出列表。