簡體   English   中英

我將如何解析自己的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)

我建議為您的文本框節點(例如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
    }

希望這可以幫助

使用這樣的東西:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM