验证字符串作为XML属性值是否有效

本文关键字:是否 有效 属性 XML 字符串 验证 | 更新日期: 2023-09-27 18:01:18

给定一个字符串,我需要确定它作为XML中的属性值是否有效。

根据规范,以下三个字符是不允许的:

<
& (unless used to encode a disallowed character, such as "&amp;")
" or ' (whichever is not used to wrap the value is allowed)

我的测试表明,创建一个包含这些字符的值的XAttribute对象似乎是有效的(我预计会出现异常,但没有抛出任何异常)。

是否有一种方法来检查给定的字符串是否作为XML属性的值有效(而不是手动检查这些字符)?

验证字符串作为XML属性值是否有效

我的测试表明,创建一个包含这些字符的值的XAttribute对象似乎是有效的

是的,因为它们将被适当地转义。例如:

XElement element = new XElement("Foo",
   new XAttribute("name", "Jon & Holly"));
Console.WriteLine(element);

打印出:

<Foo name="Jon &amp; Holly" />

属性的逻辑内容是"Jon & Holly",但是XML文件文本中的表示是"Jon &amp; Holly"

如果你想检查表示形式的有效性,你总是可以使用:

string text = "<x y='"" + value + "'" />";
try
{
    XElement.Parse(text);
    // TODO: Check that there's only one attribute in the result...
}
catch (XmlException e) { /* Invalid */ }

这太可怕了——你确定你真的需要这么做吗?