42

C# で XML を解析しています。データベースから取得しているので、XmlTextReader で読み取る前に MemoryStream に変換します。問題は、このエラーが発生することです。Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 1, position 3.以下は、XML とそれを読み取るためのコードです (データベースから問題なく出力され、最初の文字が空白ではありません)。助言がありますか?

XML:

<? xml version="1.0" encoding="utf-8" ?>
<form>
   <e order="0" type="custom" name="test">
      <fi type="text" />
      <o />
   </e>
   <e order="1" type="zip" />
   <e order="2" type="state" />
</form>

C#:

byte[] byteArray = new byte[formXml.Length];
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byteArray = encoding.GetBytes(formXml);
MemoryStream xmlStream = new MemoryStream(byteArray);

XmlTextReader xmlReader = new XmlTextReader(xmlStream);
while (xmlReader.Read())
{
    if (xmlReader.HasValue)
    {
        returnString += xmlReader.Depth.ToString();
    }
}

エンコーディングのせいかと思いましたが、UTF8とASCIIで試してみましたが、何も見つかりません。

4

9 に答える 9

41

はい、<? 間のスペースを削除する必要があります。およびxml.

<?xml version="1.0" encoding="utf-8" ?>
<form>
   <e order="0" type="custom" name="test">
      <fi type="text" />
      <o />
   </e>
   <e order="1" type="zip" />
   <e order="2" type="state" />
</form>

関連する XML 仕様は次のとおりです

于 2010-02-17T16:37:11.967 に答える
7

このエラーのもう 1 つの一般的な原因は、XmlReader がスクリプトを xml として読み取ろうとする場合です。これは、script タグの後のスクリプトをコメント アウトし始める正当な理由です。それらは引き続き実行されます。

<script language="javascript" type="text/javascript">
<!--
    function myFunction() {
    }
    ...
-->
</script>
于 2011-03-31T19:23:42.567 に答える
6

エラーメッセージは非常に明確です。1行目の位置3にエラーがあります<?xml。スペースを入れないでください。

于 2010-02-17T16:38:52.620 に答える
5

ドキュメントの最初のスペースを削除します。

<?xml version="1.0" encoding="utf-8"?>
于 2010-02-17T16:37:32.213 に答える
3

同じケースでの私のエラーは、ファイルが UTF-8 として保存されなかったことです。

于 2016-05-10T07:11:00.300 に答える
0

XML ファイルの読み取りで同じエラーが発生しました。

ファイルに誤った < 文字が含まれていることが判明しました。

特定の子ノードをコメントアウトしていて、コメント タグの 1 つを消去するときに、ファイルに余分な < を残しました。「名前は '\r' 文字で始めることはできません」というエラー メッセージが返され、この質問がその正確な検索の上位の Google 結果でした。

<node>
    <!-- <child /> --><
    <child />
    <child />
</node>
于 2014-03-26T22:36:56.570 に答える