2010-12-01 4 views
1
내가 2010 년

C# .NET을 쓰기 XML 파일

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Database\\db.mde"; 
string sql = "SELECT * FROM Customer"; 
OleDbConnection connection = new OleDbConnection(connectionString); 
OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection); 

DataSet ds = new DataSet(); 
connection.Open(); 
adapter.Fill(ds, "Test Table"); 
connection.Close(); 
dataGridView1.DataSource = ds; 
dataGridView1.DataMember = "Test Table"; 
ds.WriteXml("C:\\Users\\Desktop\\testfile.XML"); 

이 지금은 내가 C#을 Visual Studio에서 다음 코드를 원하는 모든 않는 한

그러나 나는 약간 XML의 형식을 수정해야 파일을 내보낼 때 쉽게 할 수 있습니까? 스키마 파일을 제공해야하지만 데이터 집합으로 구현하는 방법을 잘 모르겠습니다.

현재 XML은 다음과 같습니다.

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
    <Test_x0020_Table> 
    <name>Customer1</name> 
    <address>25 Big St</address> 
    <suburb>Sydney NSW</suburb> 
    <contact>Fred Nurk</contact> 
    <phone>11 1111 1111</phone> 
    </Test_x0020_Table> 
</NewDataSet> 

...하지만 난 어떤 도움도 대단히 감사하겠습니다이

<?xml version="1.0" standalone="yes"?> 
<Customers> 
    <name>Customer1</name> 
    <address>25 Big St</address> 
    <suburb>Sydney NSW</suburb> 
    <contact>Fred Nurk</contact> 
    <phone>11 1111 1111</phone> 
</Customers> 

처럼 보이게합니다.

답변

2

첫 번째 노드는 테이블 이름입니다.

데이터 세트에서 이름을 설정하여 변경할 수 있습니다.

DataSet ds = new DataSet ("Customers"); // 복수


내부 노드가 레코드입니다.

어댑터를 채울 때 이름을 지정하여 변경할 수 있습니다.

어댑터.채우기 (ds, "고객"); // 단일


이렇게하면 같은 결과를 줄 것이다 :이 복수의 결과를 돌려주는 경우로 끝날 것 의미

 
<Customers> 
    <Customer> 
    <name>Customer1</name> 
    <address>25 Big St</address> 
    <suburb>Sydney NSW</suburb> 
    <contact>Fred Nurk</contact> 
    <phone>11 1111 1111</phone> 
    </Customer> 
</Customers>

:

 
<Customers> 
    <Customer> 
    <name>Customer1</name> 
    <address>25 Big St</address> 
    <suburb>Sydney NSW</suburb> 
    <contact>Fred Nurk</contact> 
    <phone>11 1111 1111</phone> 
    </Customer> 
    <Customer> 
    <name>Customer1</name> 
    <address>25 Big St</address> 
    <suburb>Sydney NSW</suburb> 
    <contact>Fred Nurk</contact> 
    <phone>11 1111 1111</phone> 
    </Customer> 
    <Customer> 
    <name>Customer1</name> 
    <address>25 Big St</address> 
    <suburb>Sydney NSW</suburb> 
    <contact>Fred Nurk</contact> 
    <phone>11 1111 1111</phone> 
    </Customer> 
</Customers>

당신은 할 수 없습니다 XML을 작성할 때 레코드를 "테이블"로 포맷하기 때문에 단일 "고객"이 있습니다.

1

어떻게 이런 일에 대해 :

private void XmlTest() 
    { 
     String xml = "<NewDataSet><Test_x0020_Table><name>Customer1</name><address>25 Big St</address><suburb>Sydney NSW</suburb><contact>Fred Nurk</contact><phone>11 1111 1111</phone></Test_x0020_Table></NewDataSet>"; 

     XDocument doc = XDocument.Parse(xml); 
     XElement element = doc.Descendants("Test_x0020_Table").First(); 
     XElement newElement = new XElement("Customers", element.Descendants()); 

     MessageBox.Show(newElement.ToString()); 
    } 
: 여기

--edit--

 using (MemoryStream ms = new MemoryStream()) 
     { 
      ds.WriteXml(ms); 
      XDocument doc = XDocument.Load(ms); 

      // change XML using doc 

      doc.Save("C:\\Users\\Desktop\\testfile.XML");     
     } 
난 당신이 XML에 LINQ를 사용하여 XML을 변환 할 수있는 방법에 만든 작은 테스트입니다

xml을 조작하고 doc.Save() 메소드를 사용하여 저장하려면 위 코드를 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 그것이 어떻게 작동 할 것인지 100 % 확신하지 못한다. 원래 질문에 몇 가지 추가 정보가 포함되도록 업데이트했습니다. XDocument는 태그 사이에 데이터를 넣을 위치를 어떻게 알 수 있습니까? – user526549

+0

@ user526549 - @decyclone은 XDocument 메서드를 사용하여 원하는 형식으로 WriteXML에 의해 생성 된 XML을 수동으로 조작 할 것을 제안합니다. WriteXML과 같은 모양으로 대부분의 사용자를 확보 할 수 있습니다. 두 개의 외부 태그를 Customer 태그로 바꾸면됩니다. – mbeckish

+0

도움에 감사드립니다. 당신에게 예제 링크가 전혀 없습니까? 이 일을 할 수없는 것 같습니다. 나는 doc.Add (새로운 XElement ("customers"))를 추가하려고 시도했다. 그러나 그것은 작동하지 않습니다. 몇 가지 다른 조합을 시도했지만 아무것도 얻지 못하고 있습니다. 그건 그렇고 ms.Position = 0; 그것을 위해 작동하는 ds.WriteXML과 XDocument 문서 사이에 있습니다. 내가 루트 요소를 얻는 것 외에는 오류가 누락되었습니다. – user526549

1

당신의 XML은 항상

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
    <Test_x0020_Table> 
    <name>Customer1</name> 
    <address>25 Big St</address> 
    <suburb>Sydney NSW</suburb> 
    <contact>Fred Nurk</contact> 
    <phone>11 1111 1111</phone> 
    </Test_x0020_Table> 
</NewDataSet> 

에 유사한 구조가 될 것입니다 당신이 뭔가를 할 수있는 가정 :

string XMLPath = "C:\\Users\\Desktop\\testfile.XML"; 

XDocument XMLPreModification = new XDocument.Load(XMLPath); 
XDocument XMLModified = new XDocument; 

XMLDoified.Add(New XElement("Customers", XMLPreModification.Descendants.Descendants())); 

XMLModified.Save(XMLPath); 

이 단지 고객 요소 및 삽입을 추가하는 새로운하여 XDocument를하고있다 그 요소에 넣으려는 노드를 선택한 다음 파일에 저장하십시오.