关于我正在处理的应用程序,我对 XElement 类有一个非常具体的问题。
假设我尝试将元素值设置为“test & testing more < >”
XElement tester = updatedElement.XPathSelectElement("Test");
tester.SetValue("test & testing more < >");
// outputs
//<Test>test & testing more < ></Test>
这是正确的,但由于我正在使用的应用程序的限制,我还需要对单引号和双引号进行编码。
假设我在调用 XElement.SetText() 之前清理了输入。
XElement.SetText(stringValue.EscapeXml())
public static string EscapeXml(this string s)
{
string xml = s;
if (!string.IsNullOrEmpty(xml))
{
xml = xml.Replace("\"", """);
xml = xml.Replace("'", "'");
}
return xml;
}
将在调用 SetText 函数时"
变为。&quot;
因此,当呈现 HTML 时,它看起来像“,当我真的想要显示”时。
我需要对单引号进行编码的原因是因为有一项服务可以在运行时创建 xpath 表达式。
IE - 服务创建的 xpath 将等同于
XElemenet test = testParent.XPathSelectElement("Test[.='some value with single quote's ']")
当作为过滤器作为 xpath 表达式放入时,单引号将导致异常。你可能会说,“为什么我不能用'
构建过滤器时替换单引号。”
我不能这样做的原因是因为有一些 ID 元素基于与 XML 节点具有相同值的过滤器进行匹配。过滤器也不会返回元素,因为父级没有任何匹配过滤表达式的内容。
双引号起作用是因为我将大量 XML 传递给服务,并且服务将我传递的 XML 转换为另一种形式的 XML。然后服务将 XML 发送到另一个服务,该服务返回另一个具有许多属性的表单:
所以说我发送了以下内容:
<test>Some value from the original XML "123"<test/> // cannot encode here, must be done before hand
我回来
<test value="Some value from the original XML "123""/>
在评估响应时,将双引号传递给它会导致失败。我不能简单地在它进入服务之前对其进行编码,因为属性中的值必须与我的原始元素完全匹配。
有没有人有一个 XElement 类的扩展方法,它将编码 " 和 ' 引号。我试图覆盖 SetText,但它没有成功。
任何有关解决此问题的帮助将不胜感激。
谢谢!