2013-02-26 145 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 */ } 

這是相當可怕的,但 - 你肯定你真的需要做到這一點?

相關問題