0

HtmlAgilityPack を設定して、入力されたとおりにマークアップを残す方法はありますか? 私の問題は、ユーザーが自分の Web サイトでデータ出力の html レイアウトを設定できるようにすることです。使用する形式は、ASP.NET のリピーター コントロールに似ています。

次の例を見てください。

<table>
     <ItemTemplate>
          <tr>
               <td>
                    <div>Item Markup</div>
               </td>          
     </ItemTemplate>
     <AltItemTemplate>
               <td>
                    <div>Alternate Item Markup</div>
               </td>
           </tr>
     </AltItemTemplate>
</table>

これを HtmlAgilityPack にロードすると、終了タグが に追加されtrItemTemplate実際の終了trタグが から削除されAltItemTemplateます。処理の後半で、<ItemTemplate></ItemTemplate>および代替タグが削除され、有効な html になります。HtmlAgilityPack がこれをロードすると、有効な html になりません。

文字列操作によってこれを正常に解析できましたが、HtmlAgilityPack を使用できれば、より効率的で作業しやすいと思いました。

これを行うために HtmlAgilityPack を使用できるかどうか知っている人はいますか? または、文字列操作 (.NET の部分文字列、indexof、削除など) に固執する必要がある場合。

4

2 に答える 2

1

短い答えはノーです。コンテンツを DOM として操作する必要がある場合は、HTML を正しくネストする必要があります。

ただし、すべての TR コンテンツを (DOM ではなく) 純粋なテキストとして扱うことができる場合は、処理の最初にこれを追加できます。

ElementsFlags.Add("tr", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);

しかし、たとえば、これを行うと、TR タグ間のすべてが DOM ツリーとしてではなく、テキスト データとして表示されるため、たとえば、子 DIV ノードで XPATH クエリを実行できなくなります。

于 2013-08-15T05:35:49.937 に答える
0

HTMLAgilityPack にタグのクローザーを修正しようとしないように指示するには、要素フラグからタグを削除する必要があります。

dim hp as HtmlDocument
hp.LoadHTML(htmlcode)
hp.DocumentNode.ElementsFlags.Remove("tr")

ここで hp.DocumentNode を確認すると、HTMLAgilityPack がタグのクローザーを修正しようとしなかったことがわかります。

Dim dnode As HtmlAgilityPack.HtmlNode = hp.DocumentNode
dim tosee as strin = dnode.OuterHTML
于 2014-03-28T23:27:14.073 に答える