none
.net 读取XML时禁用实体转换 RRS feed

  • 问题

  • 如题,在读取XML时如何禁用实体转换,如果在XML属性中只包含一个&号就会报错,我用的的XmlReader.
    2012年5月27日 15:37

答案

全部回复

  • 您好,请给出具体代码以及您需要实现的Xml的最终效果,如果有异常也请指出,谢谢!
    2012年5月29日 1:37
  •             _keyList = new List<KeyValuePair<string, string>>();
                XmlReaderSettings xrs = new XmlReaderSettings() {
                    CheckCharacters = false,
                    IgnoreProcessingInstructions = true,
                    IgnoreComments = true,
                    IgnoreWhitespace = true
                };
                //加载转换字典
                using (XmlReader xr = XmlReader.Create(stream, xrs)) {
                    while (xr.Read()) {
                        if (xr.NodeType == XmlNodeType.Element && xr.Depth == 1 && "transList".Equals(xr.Name, StringComparison.OrdinalIgnoreCase)) {
                            while (xr.Read()) {
                                if (xr.NodeType == XmlNodeType.Element && "trans".Equals(xr.Name, StringComparison.OrdinalIgnoreCase)) {
                                    string name = null,
                                           content = null;
                                    if (xr.MoveToAttribute("name")) {
                                        name = xr.Value;
                                    }
                                    if (xr.MoveToAttribute("content")) {
                                        name = xr.Value;
                                    }
                                    _keyList.Add(new KeyValuePair<string, string>(name, content));
                                }
                            }
                            break;
                        }
                    }
                }
                Index.QuickSort<List<KeyValuePair<string, string>>, KeyValuePair<string, string>>(_keyList, Compare);

    以上代码只要XMl中包含&符就报错,这里这个符号不是用来标识XML实体的如:

    <data>
        <transList>
            <trans name="box" content="合&中|" />
            <trans name="ce" content="漂流者" />

    出现类似异常:

    “|”是意外的标记。标记应为“;”。 行 3,位置 3791。



    2012年5月29日 14:58
  • 请把&改成:&amp;或者:&#38;
    2012年6月1日 1:43