2

私の c# アプリケーションでは、データベースの値に基づいて xml を作成しています。文字列が特殊文字でなくなるまで問題ありません。以下は私のコードです。

 XmlDocument doc = new XmlDocument();
 XmlElement element = doc.CreateElement("NewDataSet");
  ------
 string itemname =System.Web.HttpUtility.HtmlEncode(ds.Tables[0].Rows[j]["itemname"].ToString());
 fieldElement = doc.CreateElement(itemname);
 fieldElement.InnerText = ds.Tables[0].Rows[j]["count"].ToString();
 fieldElement1.AppendChild(fieldElement);

`fieldElement = doc.CreateElement(itemname); でエラーが発生しています。' ' 文字 (16 進値 0x20) を名前に含めることはできません。そして、例外をスローする文字列は「Adam & Eva frisør」です。

この問題を克服する方法を誰か教えてください。

4

3 に答える 3

1

ここには 2 つの問題が考えられます。まず、要素名を html エンコードします。これは、要素名に特殊文字が含まれるまで問題なく機能します。

要素タグは大文字と小文字が区別されます。開始タグと終了タグは正確に一致する必要があります。タグ名には、!"#$%&'()*+、/;<=>?@[]^`{|}~、スペース文字を含めることはできず、-、.、または数字。

したがって、発生するのを待っているエラーです。名前が有効で、特殊文字が含まれていないことを確認してください。

次に、要素のコンテンツをエスケープしていません。引用したテキストには、エスケープされていない が含まれています&。これが実際のエラーの原因です。要素テキストの要素名に使用しているのと同じエスケープ方法を使用します。

fieldElement.InnerText = System.Web.HttpUtility.HtmlEncode(ds.Tables[0].Rows[j]["count"].ToString());
fieldElement1.AppendChild(fieldElement);
于 2013-01-25T11:34:18.570 に答える
1

fieldElement.InnerText = ... でエラーが発生する場所

エラーが発生している場所ではないことを強く疑っています。「名前に含めることはできません」という部分を考えると、これが問題だと思います:

fieldElement = doc.CreateElement(itemname);

任意のテキストを text として使用しても問題ありませんが、要素名として使用することはできません。また、データから要素名を作成することもまれです。あなたは本当に次のようなものが欲しくないですか:

fieldElement = doc.CreateElement("itemname");

?

于 2013-01-25T11:27:59.957 に答える
0

&&amp;そうしないと無効な XMLになるため、エスケープする必要があります。

要素に入れる前に、データベース テキストを XML エンコードする必要があります。これを行う方法については、この質問を参照してください。

于 2013-01-25T11:28:53.927 に答える