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

时间:2013-02-26 15:58:23

标签: c# .net xml

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

根据the spec,不允许使用以下三个字符:

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

但这非常可怕 - 你确定你真的需要这样做吗?