3

xmlTextWriterを使用してxmlを作成しています。

writer.WriteStartElement("book"); 
writer.WriteAttributeString("author", "j.k.rowling"); 
writer.WriteAttributeString("year", "1990");
writer.WriteString("&");
writer.WriteEndElement();

しかし今、私は'&'を書く必要がありますが、xmlTextWriterはこれを自動的に "&amp";として書き込みます。それで、これを行うための回避策はありますか?

docファイルを読んでxmlを作成しています。したがって、「-」を読んだ場合は、xmlに「&ndash」;と書く必要があります。したがって、書いている間は「&amp」;ndashと書かれます。

したがって、たとえば、テキストを使用してノードを作成しようとしている場合、good-bad実際には。などのXMLを作成する必要があります<node>good&ndash;bad</node>。これは私のプロジェクトの要件です。

4

3 に答える 3

9

&適切なXMLファイルでは、エスケープ文字でない限り、スタンドアロン文字を使用することはできません。したがって、を含むXMLノードが必要な場合はgood&ndash;bad、としてエンコードする必要がありますgood&amp;ndash;bad。異なるものは有効なXMLではないため、回避策はありません。それを機能させる唯一の方法は、XMLファイルをプレーンテキストとして希望どおりに書き込むことですが、適切なXMLではないため、XMLパーサーで読み取ることができませんでした。

提案された回避策のコード例を次に示します(言語を指定しなかったため、C#で表示していますが、Javaにも同様のものが必要です)。

using(var sw = new StreamWriter(stream))
{
    // other code to write XML-like data
    sw.WriteLine("<node>good&ndash;bad</node>");
    // other code to write XML-like data
}

あなたが発見したように、別のオプションは、 (C#の)WriteRaw()メソッドを使用しXmlTextWriterてエンコードされていない文字列を書き込むことですが、それが行われたときに有効なXMLファイルにならないという事実は変わりません。

しかし、前述したように、これをXMLパーサーで読み取ろうとすると、&ndashは有効なXML文字エンティティではないため失敗し、有効なXMLではありません。

&ndash;はHTML文字エンティティであるため、通常はXMLでエスケープする必要はありません。

XML言語で&は、はエスケープ文字であるため&amp;、&の適切な文字列表現も同様です。&文字には特別な意味があるため、&文字だけを使用することはできません。したがって、単一の&文字はパーサーによって誤って解釈されます/

<、>、 "、および'文字でも同様の動作が見られます。すべてXML言語内で意味があるため、ドキュメント内でテキストとして表現する必要がある場合。

これは、ウィキペディアからのXML(およびHTML)のすべての文字エンティティへの参照です。&gt;それぞれは常にエスケープ文字と名前( 、、、)&lt;で表され&quot;ます&apos;

于 2013-02-22T09:57:51.910 に答える
5

XMLでは、&としてエスケープする必要があります&amp;&文字はエンティティ用に予約されているため、それ以外の場合は許可されません。エンティティは、XMLで特別な意味を持つ文字をエスケープするために使用されます。

XMLを読み取る別のソフトウェアは、エンティティを再度デコードする必要があります。&lt;for <and &gt;for>または他の例として、XMLに基づくHTMLのような他のいくつかの言語は、これらのさらに多くを提供します。

于 2013-02-22T09:56:26.100 に答える
-1

エンコードする必要があると思います。そのようです:

colTest = "&" 
writer.WriteEncodedText(colTest)
于 2013-02-22T09:57:41.147 に答える