3

私は次のような単純なXMLファイルを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<foo attr="blah &#176; blah"/>

それを.NETXmlDocumentにロードし、保存を発行すると、次のようになります。

xmlDoc = New XmlDocument()
xmlDoc.Load("c:\temp\bar.xml")
xmlDoc.Save("c:\temp\bad.xml")

新しいXMLファイルには、解決されたamp 176(度記号)が含まれています。これにより、XMLをロードしようとしている最後のブラックボックスが壊れます。

効果がほとんどないので、エンコーディングを試してみました。パーサーがエンティティを解決せずに、入ってくるものをエコーすることは可能ですか?不思議なことに、それは解決しません&amp;#176;

4

1 に答える 1

1

XmlDocument Loadは文字のエスケープを解除し、それをいじってみて、その動作を停止する方法についての簡単な解決策を見つけることができません。

小さなハックはこのようなことをしているでしょう

foreach (XmlNode xn in xdoc.SelectNodes("descendant-or-self::*"))
{
  foreach(XmlAttribute attr in xn.Attributes)
  {
    string val = System.Web.HttpUtility.HtmlEncode(attr.Value);
    attr.Value = val;
  }
  if (!xn.InnerXml.Contains("<"))
  {
    string val = System.Web.HttpUtility.HtmlEncode(xn.InnerText);
    xn.InnerText = val;
  }
}

あなたの前に.Save(); それは私がこれに一週間を使わずに思いつくことができた最高です。

于 2010-08-10T02:01:36.023 に答える