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で試しましたが、何も見つかりません。
はい、<?の間のスペースを削除する必要がありますおよび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仕様です。
このエラーのもう1つの一般的な原因は、XmlReaderがスクリプトをxmlとして読み取ろうとしたときです。これは、スクリプトタグの後にスクリプトをコメントアウトし始める正当な理由です。引き続き実行されます:
<script language="javascript" type="text/javascript">
<!--
function myFunction() {
}
...
-->
</script>
エラーメッセージは非常に明確で、1行目の3桁目にエラーがあります。<?xml
を試してください-スペースなし。
同じケースでの私のエラーは、ファイルがUTF-8として保存されなかったことです。
ドキュメントの最初のスペースを削除します。
<?xml version="1.0" encoding="utf-8"?>
また、注意して、次のような式を避ける必要があります。
<e order="0" type="custom" name= "test">
名前の等しい後に続く空白スペースは、コードをクラッシュさせる可能性があります
XMLファイルの読み取りで同じエラーが発生していました。
ファイルに誤った<文字が含まれていることがわかりました。
特定の子ノードをコメントアウトしていましたが、コメントタグの1つを消去するときに、ファイルに余分な<を残しました。 「名前は「\ r」文字で始めることはできません」というエラーメッセージが返され、この質問はその正確な検索の上位のGoogle結果でした。
<node>
<!-- <child /> --><
<child />
<child />
</node>
このため、多くのエラーが発生しました。スペースがないことを確認してください。私が働いたスペースを削除した場所は2つあります。
だった:
xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"
何が働いた:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
ここにもスペースがありました:<abc:def>。 <および>の周りのすべてのスペースを削除します。