2013-04-10 4 views
0

У меня есть программа VB.net. Я пытаюсь использовать XMLReader для чтения XML-файла. Я хочу разбить XML-файл, чтобы организовать его в разные «Разделы». В этом примере "FormTitle" и "ButtonTitle". Я хотел бы получить данные <Text> от FormTitle и отобразить его как Форму "text" и взять <Text> в "ButtonTitle" и отобразить его в тексте кнопки.Как читать файл XML

Вот мой XML-файл:

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Database.--> 
<FormTitle> 
    <Text>Form Test</Text> 
</FormTitle> 
<ButtonTitle> 
    <Text>Button Test</Text> 
</ButtonTitle> 

Вот мой текущий код:

If (IO.File.Exists("C:\testing.xml")) Then 

    Dim document As XmlReader = New XmlTextReader("C:\testing.xml") 

    While (document.Read()) 

     Dim type = document.NodeType 


     If (type = XmlNodeType.Element) Then 

      ' 
      If (document.Name = "Text") Then 
       Me.Text = document.ReadInnerXml.ToString() 


      End If 



     End If 


    End While 

Else 

    MessageBox.Show("The filename you selected was not found.") 
End If 

Как может принести в следующем разделе (ButtonTitle) с тем же именем, который находится в FormTitle, который (Text). Я бы предположил, что мне нужно ссылаться на FormTitle и ButtonTitle в выражении if then?

+0

Обратите внимание, что ваш файл XML является плохо сформировался. XML-файл должен всегда иметь один корневой элемент, а ваш имеет два - FormTitle и ButtonTitle. Возможно, вы должны обернуть их в родительский элемент, возможно, . –

ответ

2

Ознакомьтесь с этим примером. http://msdn.microsoft.com/en-us/library/dc0c9ekk.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

Вы должны можете использовать:

doc.GetElementsByTagName("FormTitle") 

Вы можете затем цикл через все дочерние узлы. http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.childnodes.aspx

Dim root As XmlNode = doc.GetElementsByTagName("FormTitle").Item(1) 

    'Display the contents of the child nodes. 
    If root.HasChildNodes Then 
     Dim i As Integer 
     For i = 0 To root.ChildNodes.Count - 1 
      Console.WriteLine(root.ChildNodes(i).InnerText) 
     Next i 
    End If 
1

Использование XDocument является более эффективным для чтения Xml, а также более удобной для чтения из-за меньший синтаксис.

Вам необходимо добавить корень в свой XML. Я назвал его root, но это может быть что угодно. Это просто encapsultes все ваши XML

<?xml version="1.0" encoding="utf-8"?> 
<root> 
<FormTitle> 
    <Text>Form Test</Text> 
</FormTitle> 
<ButtonTitle> 
    <Text>Button Test</Text> 
</ButtonTitle> 
</root> 

Вот пример потянув «формы теста» от FormTitle

Dim document As XDocument = XDocument.Load("c:\tmp\test.xml") 
    Dim title = From t In document.Descendants("FormTitle") Select t.Value 

Назначают текста для формирования

Form1.Text = title.First() 
+0

Я не уверен, что понимаю последнюю часть. Твой «Тихий заголовок» Что ты здесь делаешь? получение значения ? Если да, как бы вы изменили текст формы на это? Я пробовал «me.text = title.tostring», но это не работает. – Shmewnix

+0

добавлен дополнительный бит в нижней части пояснения. «Dim title» создает переменную title, которая является IEnumerable. вызов. Первый получает первое значение в перечислимом. В этом случае в любом случае всего 1. – James

+0

Отлично, и каждое значение после этого будет «вторым», «третьим» и т. Д.? – Shmewnix

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