2011-01-06 2 views
0

私は制御しないソースからのデータに基づいてxmlの束を生成するアプリケーションを持っています。基本的には、そのデータをrssフィード経由でXML文書に変換しています。私はxmlエンティティに有効な名前が付くようにする方法

2_br=1 
3_br=0 

のようなデータを取得することができると私は数字で始めることはできません。次のXML

<2_br>1</2_br> 
<3_br>0</3_br> 

明らかxmlタグにそれを回しますよ。私はどこでも有効な文字のリストを見つけることができませんでした。それはどこかに存在しますか?私は基本的に接頭辞と無効な開始文字を無効にするか、インライン無効な文字を_に置き換えます。

これは難しいことではありませんが、基本的にはxmlタグ名に無効な文字のリストを見つけることができません。

答えて

4

これはどう:Extensible Markup Language (XML) 1.0 (Fifth Edition)

NameStartChar :: = ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

+2

どのように奇妙で危険な... ":"文字は技術的に名前文字として有効です。私はそれを知らなかった。 –

+0

XML推奨が完了したときに名前空間がまだ導入されていないため、「:」が許可されています。したがって、複数の ":"文字を含む名前を持つ要素を持つXML文書は、*正しい形式で有効である*ことができますが、XML名前空間の推奨に準拠していないため*名前空間は整形されません。結果として、XMLパーサは、(well-formednessに加えて)パーサが名前空間の適合性を要求する可能性があるため、そのようなドキュメントを拒否することがあります。 – jasso

+0

また、許可された名前文字のリストは、XML 1.0勧告の第4版では現在許可されている文字を許可しないことで違っていました。一部の古いパーサは、第4版(またはそれ以上)のみに準拠し、第5版ごとに有効な書類を拒否することがあります。 XML 1.0の現在の文字リストは、XML 1.1の推奨事項と一致します。 – jasso

0
XmlConvert.IsNCNameChar() 

XmlConvert.IsStartNCNameChar() 

はXMLタグ名を検証するために使用することができます。

char[] validTagNameChars = pDesiredTagName.Where(ch => XmlConvert.IsNCNameChar(ch)).ToArray(); 
string validTagName = new string (validTagNameChars); 
if (validTagName == "" || !XmlConvert.IsStartNCNameChar(validTagName[0])) 
    validTagName = "_" + validTagName;