5

XML の文字列をこのような XDocument に解析しています (XDocument.Parse を使用)

<Root>
  <Item>Here is &quot;Some text&quot;</Item>
</Root>

次に、XML を少し操作して、入ってきたのと同じように、文字列として送り返したいと思います。

<Root>
  <Item>Here is &quot;Some text&quot;</Item>
  <NewItem>Another item</NewItem>
</Root>

しかし、私が得ているのは

<Root>
  <Item>Here is \"Some text\"</Item>
  <NewItem>Another item</NewItem>
</Root>

二重引用符がエンコードではなくエスケープされていることに注目してください。

これは私が使用するかどうかに関係なく起こります

ToString(SaveOptions.DisableFormatting);

また

var stringWriter = new System.IO.StringWriter();
xDoc.Save(stringWriter, SaveOptions.DisableFormatting);
var newXml = stringWriter.GetStringBuilder().ToString();

&quot;二重引用符をとしないようにするにはどうすればよい\"ですか?

更新:多分これはそれをよりよく説明することができます:

var origXml = "<Root><Item>Here is \"Some text&quot;</Item></Root>";
Console.WriteLine(origXml);
var xmlDoc = System.Xml.Linq.XDocument.Parse(origXml);
var modifiedXml = xmlDoc.ToString(System.Xml.Linq.SaveOptions.DisableFormatting);
Console.WriteLine(modifiedXml);

これから得られる出力は次のとおりです。

<Root><Item>Here is "Some text&quot;</Item></Root>
<Root><Item>Here is "Some text"</Item></Root>

出力を次のようにしたい:

<Root><Item>Here is "Some text&quot;</Item></Root>
<Root><Item>Here is "Some text&quot;</Item></Root>
4

2 に答える 2

2

XmlWriter文字が正しくエンコードされていることを確認するには、を使用する必要があります。ただし、独自のクラスをロールしてテキストを出力しなくても、必要な出力を正確に取得できるかどうかはわかりません。

于 2010-04-05T14:50:55.437 に答える
0

テストされておらず、これが解決策であるかどうかはわかりませんが、これを置き換えてみてください

var origXml = "<Root><Item>Here is \"Some text&quot;</Item></Root>";

これとともに

var origXml = "<Root><Item>Here is \"Some text&amp;quot;</Item></Root>";
于 2010-03-27T00:52:19.577 に答える