1

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

根据规范,不允许使用以下三个字符:

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

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

有没有办法检查给定的字符串作为 XML 属性的值是否有效(除了手动检查这些字符)?

4

1 回答 1

3

我的测试表明,使用包含任何这些字符的值创建一个 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 */ }

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

于 2013-02-26T16:00:24.287 回答