1

文字列が与えられた場合、それがXMLの属性値として有効かどうかを判断する必要があります。

仕様によると、次の3文字は使用できません。

<
& (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 に答える