【问题标题】:decoding cdata content within xml解码 xml 中的 cdata 内容
【发布时间】:2011-09-02 02:50:33
【问题描述】:

客户向我们发送了一个 XML 文件,其中包含 XML 编码的 CDATA 内容 即<![CDATA[some content]]>

在 asp.net 中用解码版本替换 XML 文件中的内容的最佳方法是什么? (不要求客户向我们发送正确的文件)

谢谢

【问题讨论】:

  • 我认为 stackoverflow 格式化了我的示例,所以它没有按照我的意图读取。 cdata 标签实际上是在我们发送的 xml 中编码的。即 &lt ; >

标签: asp.net cdata


【解决方案1】:

这可能不是你想要的,但它至少会给你一个开始:

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Security;

namespace CSSandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            string oldXml = "<root><child>No CDATA here</child><child><![CDATA[Illegal xml & <> '' bobby tables]]></child><child><child><![CDATA[More CDATA &&&]]></child></child></root>";
            Console.WriteLine(oldXml);
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(oldXml);

            ProcessNodes(doc, doc.ChildNodes);

            string newXml = doc.OuterXml;
            Console.WriteLine(newXml);

            Console.ReadLine();
        }
        static void ProcessNodes(XmlDocument doc, XmlNodeList nodes)
        {
            foreach (XmlNode node in nodes)
            {
                if (node.HasChildNodes)
                {
                    ProcessNodes(doc, node.ChildNodes);
                }
                else
                {
                    if (node is XmlCDataSection)
                    {
                        string cdataText = node.InnerText;
                        node.ParentNode.InnerXml = SecurityElement.Escape(cdataText);
                    }
                }
            }
        }
    }
}

这假设您的 cdata 块是当前节点的唯一子节点(根据我的测试)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2013-03-28
    • 1970-01-01
    • 2011-01-17
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多