[已关闭问题] 配置文件中如何读写cdata元素
提问时间: 2008-04-29 11:19
悬赏分:20 提问时间2008/4/29 11:19:21 问题为何被关闭 浏览:118 次

我想要在配置文件里这样配置:

<mysection>
<url><![CDATA[http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=152674&SiteID=1]]></url>
</mysection>

而不是:

<mysection url="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=152674&amp;SiteID=1" />

总觉得每次都将文本转义很不爽,而且有的地方是长文本,不适合作为节的子串属性。

那么该如何才能读取url元素中的 cdata 呢?


提问者:阿毅 - 初学一级

问题补充:我的知道的是,对于第一种情况,已经定义一个ConfigurationSection 类来映射mysection节点元素,但是其中的url ConfigurationProperty 是否定义成一个ConfigurationElement 类,又该如何取得其中cdata内容呢?
第二种简单的多,mysection 实现类的 url ConfigurationProperty 的类型只是普通的 string 而已。

(1)
cdata会自动转换的吧...
2个月前   回答者:wingoo - 小虾三级
2个月前   阿毅 :
问题找出来了。
ConfigurationElement 不支持 CDATA 和 Text 两种 XmlNode ,除非 override DeserializeElement 方法抑制异常的抛出。
protected internal virtual void DeserializeElement(XmlReader reader, bool serializeCollectionKey)
{
    ...
    reader.MoveToElement();
    try
    {
        HybridDictionary dictionary = new HybridDictionary();
        if (!reader.IsEmptyElement)
        {
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                 ...
                }
                else
                {
                    if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        break;
                    }
                    if ((reader.NodeType == XmlNodeType.CDATA) || (reader.NodeType == XmlNodeType.Text))
                    {                 
                        throw new ConfigurationErrorsException(SR.GetString("Config_base_section_invalid_content"), reader);
                    }
                }
            }
        }
        this.EnsureRequiredProperties(serializeCollectionKey);
        ValidateElement(this, null, false);
    }
    catch (ConfigurationException exception)
    {
     ...
    }
    ...
    this.PostDeserialize();
}
看来还是把cdata内容转义成普通的 string  XmlAttribute 比较合适,不然就不用标准的 Configruation 机制。
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除