在使用C#生成XML时,将其生成为字符串是否存在问题?过去我发现通过编程方式生成XML非常冗长和复杂。通过字符串拼接/字符串构建器创建XML似乎更容易,但感觉这是一种不好的实践。
我应该将XML生成为字符串吗?
在使用C#生成XML时,将其生成为字符串是否存在问题?过去我发现通过编程方式生成XML非常冗长和复杂。通过字符串拼接/字符串构建器创建XML似乎更容易,但感觉这是一种不好的实践。
我应该将XML生成为字符串吗?
XDocument、XElement和XAttribute类使得在C#中生成xml变得更加容易,比起使用XmlDocument或XmlWriter。
举例来说,要生成这个:
<RootElement>
<ChildElement Attribute1="Hello" Attribute2="World" />
<ChildElement Attribute1="Foo" Attribute2="Bar" />
</RootElement>
你可以这样做:
XDocument xDocument = new XDocument(
new XElement("RootElement",
new XElement("ChildElement",
new XAttribute("Attribute1", "Hello"),
new XAttribute("Attribute2", "World")
),
new XElement("ChildElement",
new XAttribute("Attribute1", "Foo"),
new XAttribute("Attribute2", "Bar")
)
)
);
您尝试过使用Linq to Xml吗?它不是很冗长:
XElement xml = new XElement("contacts",
new XElement("contact",
new XAttribute("id", "1"),
new XElement("firstName", "first"),
new XElement("lastName", "last")
),
new XElement("contact",
new XAttribute("id", "2"),
new XElement("firstName", "first2"),
new XElement("lastName", "last2")
)
);
Console.Write(xml);
如果你正确格式化代码,XmlWriter并不那么糟糕:
StringBuilder builder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(builder))
{
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteStartElement("Node1");
writer.WriteAttributeString("att1", "value");
writer.WriteEndElement();
writer.WriteStartElement("Node2");
writer.WriteString("inner text");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}
using (XmlWriter writer = XmlWriter.Create(builder))
{
writer.WriteStartDocument();
{
writer.WriteStartElement("root");
{
writer.WriteStartElement("Node1");
writer.WriteAttributeString("att1", "value");
writer.WriteEndElement();
writer.WriteStartElement("Node2");
writer.WriteString("inner text");
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndDocument();
}
不,你不应该这么做。.NET(和其他平台)中的XML库确保您创建有效的XML,并节省了大量时间来担心如何解析它。此外,如果其他人需要使用您的XML并抱怨它不正确,您可以排除实际的XML本身,并节省大量时间检查您是否正确地进行了连接。
使用XmlTextWriter,您可以将结果放入StringBuilder中并使用生成的字符串。此外,使用XmlTextWriter,您还可以将内容放入流中。因此,如果您需要灵活性,请使用XmlTextWriter。
如果您的问题是关于通过字符串连接构建xml文件,请不要这样做。如果您要组合一个xml文档而没有其他帮助,请使用StringBuilder。
我会避免手动创建xml通过“连接”。这会增加生成的xml中出现错误的可能性。Microsoft的xml创建类已经经过了相当彻底的测试。利用它来获得优势。