làm thế nào để tạo một tài liệu XML như thế này?
<body>
<level1>
<level2>text</level2>
<level2>other text</level2>
</level1>
</body>
sử dụng XmlDocument
trong C #
làm thế nào để tạo một tài liệu XML như thế này?
<body>
<level1>
<level2>text</level2>
<level2>other text</level2>
</level1>
</body>
sử dụng XmlDocument
trong C #
Câu trả lời:
Thế còn:
#region Using Statements
using System;
using System.Xml;
#endregion
class Program {
static void Main( string[ ] args ) {
XmlDocument doc = new XmlDocument( );
//(1) the xml declaration is recommended, but not mandatory
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration( "1.0", "UTF-8", null );
XmlElement root = doc.DocumentElement;
doc.InsertBefore( xmlDeclaration, root );
//(2) string.Empty makes cleaner code
XmlElement element1 = doc.CreateElement( string.Empty, "body", string.Empty );
doc.AppendChild( element1 );
XmlElement element2 = doc.CreateElement( string.Empty, "level1", string.Empty );
element1.AppendChild( element2 );
XmlElement element3 = doc.CreateElement( string.Empty, "level2", string.Empty );
XmlText text1 = doc.CreateTextNode( "text" );
element3.AppendChild( text1 );
element2.AppendChild( element3 );
XmlElement element4 = doc.CreateElement( string.Empty, "level2", string.Empty );
XmlText text2 = doc.CreateTextNode( "other text" );
element4.AppendChild( text2 );
element2.AppendChild( element4 );
doc.Save( "D:\\document.xml" );
}
}
(1) Tệp XML hợp lệ có yêu cầu khai báo xml không?
(2) Sự khác biệt giữa String.Empty và “” (chuỗi trống) là gì?
Kết quả là:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<level1>
<level2>text</level2>
<level2>other text</level2>
</level1>
</body>
Nhưng tôi khuyên bạn nên sử dụng LINQ sang XML đơn giản hơn và dễ đọc hơn như sau:
#region Using Statements
using System;
using System.Xml.Linq;
#endregion
class Program {
static void Main( string[ ] args ) {
XDocument doc = new XDocument( new XElement( "body",
new XElement( "level1",
new XElement( "level2", "text" ),
new XElement( "level2", "other text" ) ) ) );
doc.Save( "D:\\document.xml" );
}
}
XmlElement
với var
, là đầu tiên sẽ là xa dễ dàng hơn để làm việc với
Làm việc với từ điển -> level2 ở trên đến từ một từ điển trong trường hợp của tôi (đề phòng mọi người thấy nó hữu ích) Thử ví dụ đầu tiên, tôi tình cờ gặp lỗi này: "Tài liệu này đã có nút 'DocumentElement'." Tôi đã được truyền cảm hứng bởi câu trả lời ở đây
và chỉnh sửa mã của tôi: (xmlDoc. DocumentElement .AppendChild (body))
//a dictionary:
Dictionary<string, string> Level2Data
{
{"level2", "text"},
{"level2", "other text"},
{"same_level2", "more text"}
}
//xml Decalration:
XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
XmlElement root = xmlDoc.DocumentElement;
xmlDoc.InsertBefore(xmlDeclaration, root);
// add body
XmlElement body = xmlDoc.CreateElement(string.Empty, "body", string.Empty);
xmlDoc.AppendChild(body);
XmlElement body = xmlDoc.CreateElement(string.Empty, "body", string.Empty);
xmlDoc.DocumentElement.AppendChild(body); //without DocumentElement ->ERR
foreach (KeyValuePair<string, string> entry in Level2Data)
{
//write to xml: - it works version 1.
XmlNode keyNode = xmlDoc.CreateElement(entry.Key); //open TAB
keyNode.InnerText = entry.Value;
body.AppendChild(keyNode); //close TAB
//Write to xmml verdion 2: (uncomment the next 4 lines and comment the above 3 - version 1
//XmlElement key = xmlDoc.CreateElement(string.Empty, entry.Key, string.Empty);
//XmlText value = xmlDoc.CreateTextNode(entry.Value);
//key.AppendChild(value);
//body.AppendChild(key);
}
Cả hai phiên bản (1 và 2 bên trong vòng lặp foreach) đều cho kết quả:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<level1>
<level2>text</level2>
<level2>ther text</level2>
<same_level2>more text</same_level2>
</level1>
</body>
(Lưu ý: dòng thứ ba "cùng cấp 2" trong từ điển cũng có thể là cấp 2 như những dòng khác nhưng tôi muốn tận dụng lợi thế của từ điển - trong trường hợp của tôi, tôi cần cấp 2 với các tên khác nhau.