web-dev-qa-db-ja.com

名前を「」文字で始めることはできません

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で試しましたが、何も見つかりません。

31
Brian Hicks

はい、<?の間のスペースを削除する必要がありますおよび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仕様です。

30
Otávio Décio

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

<script language="javascript" type="text/javascript">
<!--
    function myFunction() {
    }
    ...
-->
</script>
7
CZahrobsky

エラーメッセージは非常に明確で、1行目の3桁目にエラーがあります。<?xmlを試してください-スペースなし。

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

3
Migol

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

<?xml version="1.0" encoding="utf-8"?>
3
SLaks

また、注意して、次のような式を避ける必要があります。

<e order="0" type="custom" name= "test">

名前の等しい後に続く空白スペースは、コードをクラッシュさせる可能性があります

1
Manuel Roldan

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

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

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

<node>
    <!-- <child /> --><
    <child />
    <child />
</node>
0
Keith Sirmons

このため、多くのエラーが発生しました。スペースがないことを確認してください。私が働いたスペースを削除した場所は2つあります。

だった:

xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

何が働いた:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

ここにもスペースがありました:<abc:def>。 <および>の周りのすべてのスペースを削除します。

0
raleign