0

私はこのXML文字列を持っていますbn:

<Root><Row><ITEMNO>1</ITEMNO><USED>y</USED><PARTSOURCE>Buy</PARTSOURCE><QTY>2</QTY></Row><Row><ITEMNO>5</ITEMNO><PARTSOURCE>Buy</PARTSOURCE><QTY>5</QTY></Row></Root>

私はそれを次のXDocumentように変換しようとしています:

var doc = XDocument.Parse(bn);

ただし、次のエラーが表示されます。

Data at the root level is invalid. Line 1, position 1.

何か不足していますか?

アップデート:

これは、xml 文字列を作成するために使用する方法です。

public static string SerializeObjectToXml(Root rt)
{
    var memoryStream = new MemoryStream();
    var xmlSerializer = new XmlSerializer(typeof(Root));
    var xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);

    xmlSerializer.Serialize(xmlTextWriter, rt);
    memoryStream = (MemoryStream)xmlTextWriter.BaseStream;

    string xmlString = ByteArrayToStringUtf8(memoryStream.ToArray());

    xmlTextWriter.Close();
    memoryStream.Close();
    memoryStream.Dispose();

    return xmlString;
}

それは私が削除しなければならない最初に追加されます。最初から正しくなるように何かを変更できますか?

4

3 に答える 3

2

文字列の先頭に 2 つの文字があり、それらは見えませんが、まだそこにあり、文字列が失敗します。代わりにこれを試してください:

<Root><Row><ITEMNO>1</ITEMNO><USED>y</USED><PARTSOURCE>Buy</PARTSOURCE><QTY>2</QTY></Row><Row><ITEMNO>5</ITEMNO><PARTSOURCE>Buy</PARTSOURCE><QTY>5</QTY></Row></Root>

問題のキャラクターはこれです。これはバイトオーダーマークであり、基本的にそれを読み取るプログラムにビッグエンディアンかリトルエンディアンかを伝えます。正しくデコードされていないファイルからこれをコピーして貼り付けたようです。

それを削除するには、これを使用できます。

yourString.Replace(((char)0xFEFF).ToString(), "")
于 2013-07-03T18:01:52.383 に答える
1

文字列の先頭に2 つの印刷できない文字 ( Zero-Width No-break Space ) があります。
XML では、ルート要素の外にあるテキストは許可されません。

于 2013-07-03T18:00:52.453 に答える