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

How would I parse my own XML..?

我制作了这个 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条信息。然后我必须为那里的每个文本框子项创建一个带有特定标签名称的自定义文本框控件。

我一开始尝试做这样的事情来尝试打印出它的样子,但是代码不起作用,因为我找到的子节点是空的:

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 很生锈...有什么帮助吗?

您可以使用 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、文本框 2...如果不是这样,应该可以使用以下内容:

    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
    }

希望对您有所帮助

使用这样的东西:

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。您可以在任何需要的地方添加空值检查。