/>
XmlDocument では、書き込み時と後で変更するときに、特定の要素の自己終了タグ (つまり ) を削除でき ます。
例: 変更
<img />
または<img></img>
へ<img>
。<br />
に<br>
。
なぜ聞くの?HTML for Word 2007スキーマに準拠しようとしています。結果の HTML は、Microsoft Outlook 2007以降で表示されます。
別のStackOverflow questionを読んだ後、IsEmpty
プロパティを好きなように設定してみましfalse
た。
var imgElements = finalHtmlDoc.SelectNodes("//*[local-name()=\"img\"]").OfType<XmlElement>();
foreach (var element in imgElements)
{
element.IsEmpty = false;
}
しかし、それは結果的<img />
に<img></img>
. また、ハックとして、OuterXml
プロパティを直接変更しようとしましたが、うまくいきませんでした(期待していませんでした)。
質問
から自己終了タグを削除できますXmlDocument
か? 正直なところ、無効なxml(終了タグなし)になるため、存在するとは思いませんが、コミュニティから質問を投げ出すと思いました。
アップデート:
XmlDocument
から正規表現を使用してエクスポートした後、HTML文字列を修正することになりました(素晴らしいRegexBuddyで書かれています)。
var fixHtmlRegex = new Regex("<(?<tag>meta|img|br)(?<attributes>.*?)/>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
return fixHtmlRegex.Replace(htmlStringBuilder.ToString(), "<$1$2>");
検証パスから多くのエラーが解消され、実際の互換性の問題に集中できるようになりました。