4

文字列を受け入れ、その文字列を属性としてXElementに追加するメソッドをテストするプロセス(現在の時刻を値として)。使用するためにXElement.SetAttributeValue(XName name, object value)(XElementの属性を追加/更新することを私が知っている唯一の方法)、XName.Get提供された文字列をXNameに変換するために使用しています。

私が遭遇している問題は、XName.Get(スタックトレースはそれがから来ていることを示していますSystem.Xml.XmlConvert.VerifyNCName)がXmlExceptionをスローし、特定の文字が許可されていないと主張していることです。一例は0x02FF(˱)です。この文字が許可されるとは思っていませんでしたが、XML仕様では、0x00F8から0x02FFの範囲全体が有効であると記載されているようです。

有効な文字でこの例外が発生しますか、それとも仕様を誤解していますか?

4

1 に答える 1

3

.NET Framework4および.NETFramework4.5のAFAIRXmlスタックは、Xml仕様の第5版ではなく、第4版に基づいています。この仕様を見ると、名前にすべての有効な文字が許可されているわけではないことがわかります。特にこれを見て、文字が何であるかを見てください。範囲[0x02C2-0x0385]の文字が除外されていることがわかります。

また、.NET Framework 4および4.5のXmlスタックが第5版に移行しなかった理由は、文字範囲の変更により、同じXmlドキュメントが有効または無効になる可能性があるためです(これは実際に発生する問題です)。ドキュメント自体ではなくプロセッサ(第5版に準拠するXmlドキュメントにはバージョン1.0が含まれている可能性があります)。したがって、有効なドキュメント(第5版に準拠)は、古いパーサーによって無効として拒否されます。また、その逆も機能しませんでした。第5版対応のXmlパーサーが、以前は無効であったが第5版で有効になった名前の文字を含むドキュメントを受信した場合、このドキュメントを第5版より前のドキュメントとして拒否する必要があるかどうかを判断できませんでした。エディションであり、形式が正しくないか、第5版のドキュメントであり、受け入れる必要があります。

于 2013-01-18T05:29:10.150 に答える