XML-Datei in Visual Studio 2017/C# einlesen?
Hi, ich bin ein C# anfänger und will eine XML Datei bzw den Text in drei Textboxen (vorname, name, wohnort) einlesen. Es wird aber bei "Vorname", "Name" und "Wohnort" der gesamte InnerText in allen drei Textboxen eingelesen.
Form1.cs Code:
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using System.Xml;
namespace Personen
{
public partial class form1 : Form
{
public form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void open_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Xml-Datei|.xml";
if (ofd.ShowDialog() == DialogResult.OK)
{
XmlDocument doc = new XmlDocument();
doc.Load("C:\Users\lukas.broemer\Desktop\Lukas Brömer Ausbildung\C# XML Programme\Personen.xml");
XmlElement root = doc.DocumentElement;
vorname.Text = root.InnerText;
name.Text = root.InnerText;
wohnort.Text = root.InnerText;
textBox1.Text = Path.GetDirectoryName(ofd.FileName);
}
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
}
}
Personen.xml Code:
<Person>
<Name>Mustermann</Name>
<Vorname>Max</Vorname>
<Wohnort>München</Wohnort>
</Person>
In der Form1.cs [Design] kann ich die XML-Datei auswählen und einlesen, bei jeder Textbox steht dann "MustermannMaxMünchen". Also bei der Textbox Vorname steht dann "MustermannMaxMünchen" statt "Max", bei Name steht auch "MustermannMaxMünchen" statt "Mustermann" und bei Wohnort steht auch wieder "MustermannMaxMünchen" statt "München".
Irgendwas stimmt bei
XmlElement root = doc.DocumentElement;
vorname.Text = root.InnerText;
name.Text = root.InnerText;
wohnort.Text = root.InnerText;
nicht.
Er liest den ganzen Text ein und nicht bei jeder Textbox die einzelnen Elemente.
Bitte helft mir. :D
Thx. :D
2 Antworten
Hier ein etwas anderes Beispiel das ich mal probiert habe mit Databindings.
Die Leere Xml Datei ist schon angelegt.
Imports System.IO
Public Class frmMain
Dim blnOnce As Boolean = False
Dim dsData As New DataSet
Dim strFolderPath As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'MsgBox(dsData.Tables(0).Rows(3).Item("Data").ToString)
Dim row As DataRow
row = dsData.Tables(0).NewRow()
row.Item("Name") = "Neues Element"
row.Item("Data") = "Daten des Neuen Elements"
dsData.Tables(0).Rows.Add(row)
BindingNavigator1.MoveLastItem.PerformClick()
End Sub
Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
BindingSource1.EndEdit()
'dsData.Tables(0).Rows(3).Item("Data") = "auf wiedersehen"
'MsgBox(dsData.Tables(0).Rows(3).Item("Data").ToString)
dsData.AcceptChanges()
dsData.WriteXml(strFolderPath & "\Data.xml", XmlWriteMode.IgnoreSchema)
End Sub
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If blnOnce = False Then
InitializeData()
End If
End Sub
Private Function Data(ByVal strFilePath As String) As XDocument
Data = <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
'' Hier fehlt was siehe 2. Screenshot!!!
VB Dot Net
Microsoft
Oracle
Datasetinformation 1.0
Data.Save(strFilePath)
End Function
Private Sub InitializeData()
strFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
strFolderPath = strFolderPath & "\XML DataBinding"
If Directory.Exists(strFolderPath) = False Then
Directory.CreateDirectory(strFolderPath)
End If
If My.Computer.FileSystem.FileExists(strFolderPath & "\Data.xml") = False Then
Data(strFolderPath & "\Data.xml")
End If
If My.Computer.FileSystem.FileExists(strFolderPath & "\Data.xml") = True Then
dsData.ReadXml(strFolderPath & "\Data.xml")
Dim tables As DataTableCollection = dsData.Tables
Dim DetailsView As New DataView(tables(0))
'MsgBox(DetailsView.Item(DetailsView.Count - 1).Item("Data").ToString)
BindingSource1.DataSource = DetailsView
If txtName.DataBindings.Count = 0 Then
txtName.DataBindings.Add("Text", BindingSource1, "Name", True, DataSourceUpdateMode.OnPropertyChanged)
End If
If txtData.DataBindings.Count = 0 Then
txtData.DataBindings.Add("Text", BindingSource1, "Data", True, DataSourceUpdateMode.OnPropertyChanged)
End If
ListBox1.DataSource = BindingSource1
ListBox1.DisplayMember = "Name"
DataGridView1.DataSource = BindingSource1
BindingNavigator1.BindingSource = BindingSource1
End If
End Sub
End Class
Hey ho,
Wie MeDelock schon sagte weist du der Box den ganzen Text zu. Du solltest die XML mal umbauen, damit du daraus z.B. ein Array machen kannst. Dann kannst du das folgender Maßen machen:
vorname.Text = root.Array[0];
name.Text = root.Array[1];
wohnort.Text = root.Array[2];
Dadurch hast du dann auch 3 Werte, anstelle eines Strings.
MfG