7

かなり奇妙!ロード&リプレース時を使用して空の文字列で

 var document = new HtmlDocument();
    document.LoadHtml(data); 
    document.DocumentNode.OuterHtml.Replace("<tbody>", "");

これは正常に機能し<tbody>、削除されます。

<br> 同じように、<br/>使用に置き換えようとすると、

document.DocumentNode.OuterHtml.Replace("<br>", "<br/>");

それは動作しません :(

も試した、

 var brTags = document.DocumentNode.SelectNodes("//br");
            if (brTags != null)
            {
                foreach (HtmlNode brTag in brTags)
                {
                    brTag.OuterHtml = "<br/>";
                    // brTag.Name= "br/"; - > Also this one :(
                }
            }

HTMLAgilityPack の replace() 関数は自己終了タグでは機能しませんか?

4

4 に答える 4

11
document.OptionWriteEmptyNodes = true;

あなたのためにトリックをします!

于 2013-09-02T11:49:52.230 に答える
7

ノードを閉じる必要がある場合は、手動で<br>置き換える必要はありません。たとえば、次のように、ライブラリにそうするように指示するだけです。<br/>

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<br/>");
doc.Save(Console.Out);

これを出力します:

<br>

この

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<br/>");
doc.OptionWriteEmptyNodes = true;
doc.Save(Console.Out);

これを出力します:

<br />
于 2013-09-02T10:36:28.397 に答える
2
StringWriter writer = new StringWriter();
var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings() { OmitXmlDeclaration = true });
document.OptionOutputAsXml = true;

document.Save(xmlWriter);
var newHtml = writer.ToString();
于 2013-09-02T10:21:27.263 に答える
1

実際には、置換の結果をドキュメントに割り当てない場合、最初のクエリも機能しないはずです。C# では、文字列は不変です。実行すると、Replace新しい文字列が作成されて返されます。元の文字列は変更されません。

またOuterHtml、読み取り専用です。割り当てることはできません。

ノードを削除するには、それらを選択し、それぞれを削除して、結果を元の文字列に保存する必要があります。

var document = new HtmlDocument();
document.LoadHtml(data);
foreach (var tbody in document.DocumentNode.SelectNodes("//tbody"))
    tbody.Remove();
data = document.DocumentNode.OuterHtml;

アップデート:

foreach (var br in document.DocumentNode.SelectNodes("//br"))
    br.RemoveAllChildren();

HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Closed | HtmlElementFlag.Empty;
document.OptionWriteEmptyNodes = true;
data = document.DocumentNode.OuterHtml;
于 2013-09-02T09:57:35.810 に答える