2015-01-29 3 views
0

Я сделал этот XML-файл, который мне нужно попробовать и создать графический интерфейс. Нет, я не собираюсь прыгать к WPF, если вам это интересно :-)Как бы я разобрал свой собственный XML ..?

Вот 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 довольно ржавый ... любая помощь?

+0

Что именно вы ожидаете от цикла while? 'gui.GetEnumerator(). MoveNext()' не запускается через дочерние узлы ;-) –

ответ

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).

0

Я хотел бы предложить давая различные значения для TextBox узлов, таких как 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 
    } 

Надеется, что это помогает

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); 
} 

Это использует API XDocument вместо старого API XMLDocument. Вы можете добавлять нулевые проверки там, где они вам нужны.

Смежные вопросы