Küçük bir uygulama (bir telefon rehberi) oluşturuyorum, aslında Ben zaten bir veritabanı olarak ms access kullanarak oluşturdum, ama şimdi, ben XML öğreniyorum ve bu uygulama için bir veritabanı olarak kullanmayı planlıyorum (sadece eğlence için) ve eğitim amaçlı).C# kullanarak bu iki XML dosyası nasıl sorgulanır?
Erişim veritabanımdaki şema İşte.
Ve iki erişim tablolar için aynı yapıya sahip iki XML dosyalarını yarattı.contactlist Tablo
<?xml version="1.0" standalone="yes"?>
<ContactList>
<xs:schema id="ContactList" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="ContactList" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Contact">
<xs:complexType>
<xs:sequence>
<xs:element name="ContactID" type="xs:int" minOccurs="0" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Contact>
<ContactID>1</ContactID>
<Name>Peter</Name>
</Contact>
<Contact>
<ContactID>2</ContactID>
<Name>John</Name>
</Contact>
</ContactList>
ContactNumbers Tablo
<?xml version="1.0" standalone="yes"?>
<ContactNumbers>
<xs:schema id="ContactNumbers" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="ContactNumbers" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Numbers">
<xs:complexType>
<xs:sequence>
<xs:element name="ContactID" type="xs:int" minOccurs="0" />
<xs:element name="Mobile" type="xs:string" minOccurs="0" />
<xs:element name="Office" type="xs:string" minOccurs="0" />
<xs:element name="Home" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Numbers>
<ContactID>1</ContactID>
<Mobile>+63-9277-392607</Mobile>
<Office>02-890-2345</Office>
<Home>0</Home>
</Numbers>
<Numbers>
<ContactID>2</ContactID>
<Mobile>+62-9277-392607</Mobile>
<Office>02-890-2345</Office>
<Home>1</Home>
</Numbers>
</ContactNumbers>
Bu benim basit bir uygulama gibi görünmelidir nasıl:
Orijinal uygulamasında, belirli bir kişinin iletişim numaralarını almak için INNER JOIN deyimini kullandım. Ancak şimdi, 2 xml dosyasını tablo olarak kullanıyorum (iki ms erişim tablosuna karşılık gelir). Bu iki XML dosyasını sorgulamak ve bağlamak ve ilk uygulamam (erişim kullanarak) sürümüyle aynı işlevselliği elde etmek hala mümkün mü? Ben şahsen böyle devam DataViewManager DataTable ve çalışmak için sevmiyorum
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestXML
{
public partial class Form1 : Form
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
DataSet ds = new DataSet();
DataView dv = new DataView();
public Form1()
{
InitializeComponent();
}
private void btnBrowse_Click(object sender, EventArgs e)
{
try
{
openFileDialog1.Filter = "XML Document (*.xml)|*.xml";
openFileDialog1.FileName = "";
openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
txtDirectory.Text = openFileDialog1.FileName;
btnLoad.Enabled = true;
}
}
catch (Exception x)
{
btnLoad.Enabled = false;
MessageBox.Show("Something went wrong! \n" + x.Message, "Ooops!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void btnLoad_Click(object sender, EventArgs e)
{
dgContactList.DataSource = LoadXML();
}
private DataView LoadXML()
{
try
{
ds.Clear();
ds.ReadXml(txtDirectory.Text, XmlReadMode.ReadSchema);
dv = ds.Tables[0].DefaultView;
lblStatus.Text = "XML is loaded successfully";
}
catch (Exception x)
{
MessageBox.Show("Something went wrong! \n" + x.Message, "Ooops!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
lblStatus.Text = "";
}
return dv;
}
}
}
Wow! hehe, cevabınız için çok teşekkür ederim efendim :). Birinin cevap yazdığından çok memnunum ve işe yarıyor. Her ne kadar özellikle benim gibi acemi bu kadar kolay değil, acemi. Ama ben daha fazla okuma ve kodunuzla etrafta oynayacağım, tek istediğim, çalışmam için bir örnek vermek ve daha az gelişmiş bir uygulama ve kodlama yapmak için bir temel olarak hizmet etmek. Tekrar teşekkürler :) – yonan2236
Ben LAMDA İfade 'zar zor anlamak – yonan2236