我将如何解析自己的XML ..?

时间:2015-01-29 23:53:08

标签: c# xml winforms

我制作了这个XML文件,我需要尝试从中生成GUI。不,如果你想知道,我不会跳到WPF: - )

以下是我制作的XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <gui groupboxlabel="Barnets Stamdata" type="CHILD">
        <textbox label="CPR" />
        <textbox label="Navn" />
        <textbox label="Efternavn" />
        <textbox label="Addresse" />
        <textbox label="Hus nr." />
        <textbox label="Opgang" />
        <textbox label="Post Nr." />
        <textbox label="By" />
        <textbox label="Email" />
        <textbox label="Telefon nr." />
        <textbox label="Sagsbehandler" />
        <textbox label="Konsulent" />
        <textbox label="Aflastning" />
        <!-- <combobox label="Foranstaltning" /> -->
        <!-- <date label="Anbring" /> -->
        <!-- <date label="Udskriv" /> -->
    </gui>
</root>

我需要先找到gui标签,这样我才能在那里提取2条信息。然后我必须为那里的每个文本框子项创建一个具有特定标签名称的自定义文本框控件。

我尝试在第一次做这样的事情来尝试打印它看起来像什么,但代码不起作用,因为我找到的子节点是null:

public void CreateNewLayout(Form parent, String path, String token)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(path);

    XmlNodeList gui = xmlDoc.GetElementsByTagName("gui");
    if (gui.Count == 0)
    {
        MessageBox.Show("XML fil har ingen elementer", "Fejl");
        return;
    }
    while (gui.GetEnumerator().MoveNext())
    {
        gui.GetEnumerator().Current.ToString();
    }
}

问题是,我的XML非常生疏......有什么帮助吗?

3 个答案:

答案 0 :(得分:5)

您可以使用Linq-Xml

var document = XDocument.Parse(inputXmlString);

document
.Root
.Element("gui")
.Elements()
.Select(element =>
   new
   {
       Type = element.Name,
       Label = element.Attribute("label").Value,
   })
.Dump();

这是Linqpad中的一个快速示例,展示了如何将XML转换为匿名类型。它不必是一个匿名类型,它可以输入你想要的类型......

此外,如果要过滤元素,请将元素名称传递到.Elements(string)

答案 1 :(得分:0)

我建议为文本框节点提供不同的值,例如textbox1,textbox2 ......如果不是类似下面的内容应该有效:

    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
    List<string> labels = new List<string>();
    doc.LoadXml([This would be text from file]);
    string groupboxlabel = doc.SelectSingleNode("root/gui").Attributes["groupboxlabel"].Value;
    string type = doc.SelectSingleNode("root/gui/textbox").Attributes["type"].Value;
    System.XmlNodeList nodeList = doc.SelectNodes("root/gui");
    foreach (XmlNode node in nodeList)
    {
        labels.Add(node.Attributes["label"].Value;);//Now you will have a list of labels
    }

希望这有帮助

答案 2 :(得分:0)

使用类似的东西:

XDocument document = XDocument.Load(@"C:\DOTNET\PRACTICE\XmlTest\XmlTest\XMLFile1.xml");

XElement guiNode = document.Root.Element("gui");

List<XAttribute> attributes = new List<XAttribute>();

foreach(var attribute in guiNode.Attributes())
{
    attributes.Add(attribute);
}

这使用XDocument API而不是旧的XMLDocument API。您可以在任何需要的地方添加空值检查。