3

我有一个 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 停止写入产品节点。

有没有办法解决这个问题?

4

4 回答 4

2

您可以使用WriteRaw或将内容包含在<![CDATA[ content goes here ]]>

于 2010-06-11T08:45:44.593 回答
1

例如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-11T08:58:13.953 回答
0

您需要稍微重新组织您的代码,并使用 WriteString 写入值,因为这会编码“特殊”字符:

使用http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.writestring.aspx

当 Xml 被读回(使用 Xml 阅读器)时,编码的字符将被解码。

于 2010-06-11T08:57:34.573 回答
-1

您可以使用类中的Server.HtmlEncode(string)方法System.Web.HttpServerUtility(这将需要您添加程序集),它将转换<&lt;(例如)

然后使用Server.HtmlDecode(string)转换&lt;<

于 2010-06-11T08:46:11.870 回答