2011-12-08 31 views
5

Cảm ơn bạn rất nhiều trướcĐang cố gắng để viết thư cho một tập tin XML hiện tại cho C#

Đây là XML gốc file

<my:Incident> 
     <my:Category>This is for Category</my:Category> 
       <my:Status>`Status is Close`</my:Status> 
     <my:Description>`This is the description part</my:Description> 
</my:Incident> 

và tôi muốn thêm các lĩnh vực khác theo my:Incident

Đây là một ví dụ về nó:

<my:Incident> 
     <my:Category>This is for Category</my:Category> 
       <my:Status>`Status is Close`</my:Status> 
     <my:SummaryDescription>This is the summary</my:SummaryDescription> 
     <my:Description>`This is the description part</my:Description> 
</my:Incident> 

Tôi đã cố gắng triển khai nhưng tôi có thi s thông báo lỗi:

Ký tự ':', giá trị thập lục phân 0x3A, không được bao gồm trong tên.

public void writerXMLTest(string fileName) 
     { 

      if (!File.Exists(fileName)) 
      { 
       XmlTextWriter writer = new XmlTextWriter(fileName, null); 
       writer.WriteStartElement("my:Incident"); 
       writer.WriteEndElement(); 
       writer.Close(); 
      } 

      XDocument doc = XDocument.Load(fileName); 
      XElement demoNode = new XElement("my:Incident"); 
      demoNode.Add(new XElement("my:SummaryDescription", "Test Test")); 


      Console.WriteLine("I write it!!!!!"); 
     } 

tôi sẽ đánh giá cao nếu có ai có thể hướng dẫn cho tôi nơi tôi đã làm sai trong mã của tôi.


Tôi đã sửa đổi mã một chút. Nhưng bây giờ tôi không thể viết nó vào tập tin XML hiện

Đây là mã của tôi:

public void writerXMLTest(string fileName) 
     { 

      if (!File.Exists(fileName)) 
      { 
       XmlTextWriter writer = new XmlTextWriter(fileName, null); 
       writer.WriteStartElement("Incident", "my"); 
       writer.WriteEndElement(); 
       writer.Close(); 
      } 

      XDocument doc = XDocument.Load(fileName); 
      XElement demoNode = new XElement("SummaryDescription", "Test Test"); 


      Console.WriteLine("I write it!!!!!"); 
     } 

Trả lời

2

Có một số vấn đề ở đây. Đầu tiên, "XML gốc" của bạn không hợp lệ vì bạn chưa xác định không gian tên "của tôi". Hoặc bạn đã không hiển thị cho chúng tôi toàn bộ tệp XML hoặc bạn đang mã hóa XML không hợp lệ. Đừng làm thế.

Tôi không thể ghi nó vào tệp XML hiện có.

"Tôi không thể" nghĩa là gì? Nó ném một ngoại lệ? Ngoại lệ là gì? Hoặc bạn có nghĩa là tập tin của bạn không thay đổi sau khi chạy mã của bạn? Đó là điều không ngạc nhiên vì mã của bạn không thực sự làm bất cứ điều gì.

XDocument doc = XDocument.Load(fileName); 

Điều này tải tệp XML của bạn từ đĩa ... và sau đó không làm gì với nó. Nó không thay đổi tập tin.

XElement demoNode = new XElement("SummaryDescription", "Test Test"); 

Điều này tạo ra một nguyên tố mới XML, hoàn toàn không liên quan đến doc, file gốc, hoặc bất cứ điều gì khác ... và sau đó ném nó đi mà không làm bất cứ điều gì với nó. Bạn chưa thêm nó ở bất kỳ đâu hoặc lưu bất kỳ thứ gì vào một tệp.

và tôi muốn thêm các lĩnh vực khác theo tôi: Incident

Nếu bạn muốn thêm demoNode đến tập tin, trước tiên bạn phải tìm ra Incident nút:

XElement e = doc.Descendants(XName.Get("Incident", nameSpace)).FirstOrDefault<XElement>(); 

Add phần tử mới của bạn cho nó:

if (e != null) 
{ 
    e.Add(new XElement(XName.Get("SummaryDescription", nameSpace), "Test Test")); 
} 

Sau đó lưu đã thay đổi tài liệu

doc.Save(fileName); 
+0

Cảm ơn sự giúp đỡ của bạn. Bạn đã giải quyết nó. :-) – yyc2001

5

này là sai:

writer.WriteStartElement("my:Incident"); 

này là đúng:

writer.WriteStartElement("Incident", "blablablaSpace:my"); 

Chỉnh sửa:

writer.WriteStartElement("Incident", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56:my"); 
+0

Tôi sửa lỗi nhưng bây giờ tôi không thể ghi nó vào Tệp XML hiện tại – yyc2001

+0

@ yyc2001 Điều này có nghĩa là gì? Tôi hy vọng bạn không sử dụng những gì tôi đã viết theo nghĩa đen :) – FailedDev

+0

@FailedDec Không thực sự tôi đã sửa đổi bài đăng của mình để hiển thị mã cập nhật của tôi. – yyc2001

1

Tiền tố "my:" của bạn là không gian tên. Bạn phải sử dụng TagName = "Incident", Namespace = "my".

Các vấn đề liên quan