XmlDocument - richtig parsen

14/07/2009 - 20:07 von Claudia Maier | Report spam
Hallo,

wie lese ich jetzt diese Daten/Variablen am besten aus?

Id
Name
ref
no
machine
returnCode
identifierType
No2
items
name, value
productData
id, value

Vielen Dank.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
<header Id="512" Name="Start" >
<location ref="104" no="710" machine="1" />
</header>
<event>
<result returnCode="0"></result>
</event>
<bottom>
<identifierType>Test</identifierType>
<No2>001454</No2>
<items>
<item name="Product" value="Eis" />
<item name="Number" value="0987654321" />
</items>
<productData isList="true">
<productData id="0" value="100035001" />
<productData id="1" value="100035002" />
</productData>
</bottom>
</root>

Ich habe es bis dato so gelöst.


Grüße Claudia

Für die Id

XmlDocument doc = new XmlDocument();
doc.LoadXml(sResponse);
XmlNode nodeResult;
XmlNode nodeReturnCode;
XmlElement elementResult = doc.DocumentElement;
nodeResult = elementResult.SelectSingleNode("//root/header");
nodeReturnCode = nodeResult.Attributes.GetNamedItem("Id");
Id=nodeReturnCode.Value;

Für die items

XmlNodeList nodeList2;
XmlElement elementListe2 = doc.DocumentElement;
nodeList2 = elementListe2.SelectNodes("//root/bottom/items/item");
foreach (XmlElement element2 in nodeList2)
{
name = element2.GetAttribute("name");
if (name == "Product")
{
prodcut = element2.GetAttribute("value");
System.Windows.Forms.MessageBox.Show("Product= " + product);
}
else if (name == "Number")
{
number = element2.GetAttribute("value");
System.Windows.Forms.MessageBox.Show("Number= " + number);
}
}

Für No2
XmlElement element3 = doc.DocumentElement;
XmlNode No2 = element3.SelectSingleNode("//root/bottom/No2");
string s2 = No2.Value; InnerText? InnerXML?
 

Lesen sie die antworten

#1 Frank Dzaebel
15/07/2009 - 08:03 | Warnen spam
Hallo Claudia,

wie lese ich jetzt diese Daten/Variablen am besten aus?



Ansich hast Du ja schon eine mögliche Implementation.
Ich stelle Dir mal andere zum Vergleich vor.
Angenommen, Du implementierst es über:

[XML als C# Klasse]
http://dzaebel.net/XmlAsCsharpClass.htm

dann könntest Du typsicher etwas wie folgendes benutzen
(vorausgesetzt, Du ànderst den inneren "ProductName"
im XML in "Product") :

private void Form1_Load(object sender, EventArgs e)
{
string xmlDataPath = Path.Combine(Application.StartupPath, "Data.xml");
root doc = new root(); doc.ReadXml(xmlDataPath);
var res = from br in doc.bottom
from its in br.GetitemsRows()
from i in its.GetitemRows() select i;
DataGridView dgv = new DataGridView();
dgv.DataSource = res.CopyToDataTable();
dgv.Dock = DockStyle.Fill; Controls.Add(dgv);
}
________________

Du könntest auch Linq to XML nehmen:

[LINQ to XML für XPath-Benutzer]
http://msdn.microsoft.com/de-de/lib...75178.aspx

private void Form1_Load(object sender, EventArgs e)
{
// using System.Xml.XPath;
string xmlDataPath = Path.Combine(Application.StartupPath, "Data.xml");
XNode doc = XDocument.Load(xmlDataPath);
var res = doc.XPathSelectElements("//root/bottom/items/item");
var rs = from r in res select new {
Name = r.Attribute("name").Value,
Wert = r.Attribute("value").Value};
DataGridView dgv = new DataGridView();
dgv.DataSource = rs.ToList();
dgv.Dock = DockStyle.Fill; Controls.Add(dgv);
}
__________

Deine "No2" wàre etwa:

private void Form1_Load(object sender, EventArgs e)
{
// using System.Xml.XPath;
string xmlDataPath = Path.Combine(Application.StartupPath, "Data.xml");
XNode doc = XDocument.Load(xmlDataPath);
var res = doc.XPathSelectElements("//root/bottom/No2");
var rs = from r in res select new {Name=r.Name, Wert=r.Value};
DataGridView dgv = new DataGridView();
dgv.DataSource = rs.ToList();
dgv.Dock = DockStyle.Fill; Controls.Add(dgv);
}

bzw. ggf. eingàngiger:

var res = doc.XPathSelectElements("//root/bottom/No2");
foreach (var r in res) MessageBox.Show(r.Name+"=" + r.Value);


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen