c# - C# XDocument 转义符号的正确方法
问题描述
您好我在 xml 中转义,问题是我的输出被转义了 2 次,我不明白它为什么会发生。下面的代码:
private static string FixSingleEncoding(string data)
{
//data?.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace(""", """).Replace("'", "'");
return System.Net.WebUtility.HtmlEncode(data); //SecurityElement.Escape(data);//
}
private static XDocument FixEncoding(XDocument instance)
{
XNamespace naming = instance.Root.Name.Namespace;
var result = instance.Descendants(naming + "dataset").ToList();
var count = result.Count;
for (int i = 0; i < count; i++)
{
result[i].Value = FixSingleEncoding(result[i].Value);
}
return instance;
}
public static bool CreateNewDataset(string path, string data)
{
Debug.WriteLine("CALL");
XDocument xdoc = XDocument.Load(Path.Combine(MasterLocation, path));
xdoc = FixEncoding(xdoc);
XNamespace df = xdoc.Root.Name.Namespace;
XElement root = new XElement(df+"changeSet");
root.Add(new XAttribute("id", "My Name"));
root.Add(new XAttribute("author", "Test"));
string final = data;
XElement innerelement = new XElement(df + "data", final);
innerelement.Add(new XAttribute("endDelimiter", "GO"));
root.Add(innerelement);
xdoc.Root.Add(root);
xdoc.Save(Path.Combine(MasterLocation, path));
return true;
}
问题是当我第一次加载 xml 文件并使用 CreateNewDataset 方法时,它从 xml 文件中检索所有数据并取消转义旧数据,所以我输入了 FixEncoding 方法,但随后出现了另一个问题,现在它转义了两次,我怎么知道确切两次,很好地使用 VS Code 并将 XML Entity 转换为字符串,它需要转换 2 次为可读字符串, CreateNewDataset 方法只调用一次,但是数据转义了两次,我在这里错过了什么?
输入数据
IF EXISTS ( SELECT *
FROM sysobjects
WHERE id = object_id(N'[dbo].[table1]')
and OBJECTPROPERTY(id, N'IsProcedure') = 0)
CreateNewDataset 之前的原始代码:
<changeSet id="Test" author="My Name">
<data endDelimiter="GO">
IF EXISTS ( SELECT *
FROM sysobjects
WHERE id = object_id(N'[dbo].[table1]')
and OBJECTPROPERTY(id, N'IsProcedure') = 0)
</data>
</changeSet>
创建新数据集后(没有 FixEncoding)
<changeSet id="Test" author="My Name">
<data endDelimiter="GO">
IF EXISTS ( SELECT *
FROM sysobjects
WHERE id = object_id(N'[dbo].[table1]')
and OBJECTPROPERTY(id, N'IsProcedure') = 0)
</data>
</changeSet>
解决方案
推荐阅读
- git - 如何在 Mac 终端上显示完整路径和 git 分支
- javascript - 尽管异步/等待,Discord bot 仍以错误的顺序发送消息
- html - 粘性元素未粘在指定位置
- javascript - 不同对象内的矩阵的数学运算
- javascript - 检查 url 是否包含列入黑名单的字符串 javascript
- python - 将所有构建工件存储在 Jenkins 中
- reactjs - 在 Web 上快速呈现更改
- time - Liferay 7.2 时区设置
- python - 只要值为 true,Pandas Dataframe 就会将它们分组
- cassandra - Cassandra 在分区聚类列上排序