给定一个字符串,我需要确定它是否作为XML中的属性值有效。
根据the spec,不允许使用以下三个字符:
<
& (unless used to encode a disallowed character, such as "&")
" or ' (whichever is not used to wrap the value is allowed)
我的测试表明,创建一个包含任何这些字符的值的XAttribute对象似乎是有效的(我预计会有例外,但不会抛出任何内容)。
有没有办法检查给定字符串是否有效作为XML属性的值(除了手动检查这些字符外)?
答案 0 :(得分:2)
我的测试表明创建一个包含任何这些字符的值的XAttribute对象似乎是有效的
是的,因为它们会被适当地转义。例如:
XElement element = new XElement("Foo",
new XAttribute("name", "Jon & Holly"));
Console.WriteLine(element);
打印出来:
<Foo name="Jon & Holly" />
属性的逻辑内容为"Jon & Holly"
,但XML文件文本中的表示形式为"Jon & 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 */ }
但这非常可怕 - 你确定你真的需要这样做吗?