2013-02-26 117 views
0

给定一个字符串,我需要确定它是否作为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

使用'XAttribute'会为你逃脱这些。 – Oded 2013-02-26 15:59:53

+0

我已经回答了被问到的问题,但知道*为什么*您尝试这样做会很有用。 – 2013-02-26 16:03:54

+0

这是一个在大多数使用情况下最终会陷入XML的领域。我们希望在设置字段时尝试进行验证,而不是在将其放入XML中时进行验证。如果XAttribute只会为我们编码,那么这就成了一个没有问题的问题。 – yoozer8 2013-02-26 16:07:33

回答

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 */ } 

这是相当可怕的,但 - 你肯定你真的需要做到这一点?

相关问题