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 ファイルを見ると、製品名に上記の文字のいずれかが含まれていると xmlwriter が製品ノードの書き込みを停止するため、xml は不完全です。

この問題を解決する方法はありますか?

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 に答える