我有一个xmlWriter,我想写一个包含"/“"<”">“字符的字符串(这是XML语法的一部分,破坏了XML代码)。下面是我的c#代码:
public Boolean Initialize(String path)
{
Boolean result = true;
XmlWriterSettings settings = new XmlWriterSettings();
settings.CheckCharacters = true;
settings.Encoding = Encoding.UTF8;
settings.Indent = true;
xmlWriter = XmlWriter.Create(path, settings);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("TestData");
isInitialized = true;
return result;
}
public void WriteProducts(List<Product> productList)
{
if (isInitialized == true)
{
foreach (Product product in productList)
{
xmlWriter.WriteStartElement("Product");
xmlWriter.WriteElementString("Id", product.ProdId);
xmlWriter.WriteElementString("Name", product.ProdName);
xmlWriter.WriteElementString("GroupId", product.ProdGroup);
xmlWriter.WriteElementString("Price", product.ProdPrice.ToString((Consts.FORMATTED_PRICE)));
xmlWriter.WriteEndElement();
}
}
}
public void Close()
{
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
}应用程序运行时没有任何错误,但是如果我查看xml文件,就会发现xml是不完整的,因为当产品名包含上述字符之一时,xmlwriter将停止写入产品节点。
有没有办法解决这个问题?
发布于 2010-06-11 16:45:45
您可以使用WriteRaw或将内容封装在<![CDATA[ content goes here ]]>中
发布于 2010-06-11 16:58:14
例如,如果product.ProdName可以包含这些字符,您可以这样做:
xmlWriter.WriteStartElement("Product");
xmlWriter.WriteElementString("Id", product.ProdId);
xmlWriter.WriteStartElement("Name");
xmlWriter.WriteString(product.ProdName); // or xmlWriter.WriteCData(product.ProdName);
xmlWriter.WriteEndElement();
xmlWriter.WriteElementString("GroupId", product.ProdGroup);
xmlWriter.WriteElementString("Price", product.ProdPrice.ToString((Consts.FORMATTED_PRICE)));
xmlWriter.WriteEndElement();发布于 2010-06-11 16:57:35
您需要稍微重新组织一下代码,并使用WriteString写入值,因为这会对“特殊”字符进行编码:
使用http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.writestring.aspx
当Xml被读回时(使用Xml阅读器),编码的字符将被解码。
https://stackoverflow.com/questions/3021391
复制相似问题