gpt4 book ai didi

c# - XmlException - 来自第 3 方的非法 XML;必须处理

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:36 25 4
gpt4 key购买 nike

创建 XML 文件时,有几个关于此的 SO 问题和答案;但是找不到任何关于何时从必须处理的第 3 方获得错误 XML 的信息;请注意,第三方不对非法 XML 负责。

最终,需要对 .InnerText 进行转义或编码(例如更改为合法的 XML 字符),然后在正确的 XML 解析后进行解码。

问题:是否有任何库可以Load() 无效/非法 XML 文件以允许快速导航此类转义/编码?还是我不得不手动解析无效的 xml,一路修复它……?

<?xml version="1.0" encoding="utf-8"?>
<ChunkData>
<Fields>
<Field1>some words < other words</Field1>
<Field2>some words > other words</Field2>
</Fields>
</ChunkData>

最佳答案

虽然 HttpAgilityPack 很棒(我正在自己的另一个项目中使用它),但我没有时间听从 Alexei 的建议——这正是我一直在寻找的方向——无法解析它作为 XML?很酷,将其解析为 HTML ...我什至没有想到 ...

最终得到了这个,它起到了作用(但这正是 Alexei 所反对的):

private static string EncodeValues(string xml)
{
var doc = new List<string>();
var lines = xml.Split('\n');
foreach (var line in lines)
{
var output = line;
if (line.Contains("<Field") && !line.Contains("Fields>"))
{
var value = line.Parse(">", "</");
var encoded = HttpUtility.UrlEncode(value);
output = line.Replace(value, encoded);
}
doc.Add(output);
}
return string.Join("", doc);
}

private static Hashtable DecodeValues(IDictionary data)
{
var output = new Hashtable();
foreach (var key in data.Keys)
{
var value = (string)data[key];
output.Add(key, HttpUtility.UrlDecode(value));
}
return output;
}

与我很久以前写的扩展方法结合使用...

public static string Parse(this string s, string first, string second)
{
try
{
if (string.IsNullOrEmpty(s)) return "";
var start = s.IndexOf(first, StringComparison.InvariantCulture) + first.Length;
var end = s.IndexOf(second, start, StringComparison.InvariantCulture);
var length = end - start;
return (end > 0 && length < s.Length) ? s.Substring(start, length) : s.Substring(start);
}
catch (Exception) { return ""; }
}

这样使用(为清楚起见,与 Transform 和 Hashtable 创建方法分开):

xmlDocs[0] = EncodeValues(xmlDocs[0]); // in order to handle illegal chars in XML, encode InnerText
var doc = TransformXmlDocument(orgName, xmlDocs[0], xmlDocs[1]);
var data = GetHashtableFromXml(doc);
data = DecodeValues(data); // decode the values extracted from the hashtable

无论如何,我一直在寻找见解......请随时对此解决方案发表评论 - 或者提供其他解决方案。

关于c# - XmlException - 来自第 3 方的非法 XML;必须处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35441038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com