2012-12-19 15 views
7

這是第一個問題,我在這個網站問,所以我爲我提前做出任何道歉muckups過濾Literalcontrol,我會嘗試但要問這個問題,因爲儘可能最好。製作control.Parsecontrol(HTMLString)的div元素的替代溴元素

我發現我的問題有點難以解釋,但它歸結爲:

我有一個是通過從Web服務獲取XML文件,並使用XSLT生成HTML的大串將其轉換爲大量的HTML。然後,我將它解析爲一個Control集合,添加一些事件處理程序並將其添加到HTMLPlaceholder,並且萬事萬物都可以正常工作。

然而,由於該HTML字符串包含幾乎我的整個網站,並正在手頭上的終端不能處理所有標記一次,我篩選我送標記運行,但是這提出了一個問題。

Div元素不能被濾除而不會丟失我想要保留的Div元素。這是因爲Parsecontrol會將我的Div元素減半並將它們轉換爲Literalcontrols,它們按br元素排序。

顯示我的代碼是有點辛苦,但這裏是發生了什麼一個例子:

//html contains the auto generated HTML 
ctrl = ParseControl (html); 

      for (int i = ctrl.Controls.Count - 1 ; i >= 0 ; --i) 
      { 

       string MenuId = ""; 
       Control theControl = ctrl.Controls[i]; 

       if (theControl is Button) 
       // Code that filters buttons 
       if (theControl is TextBox) 
       // Code that filters textboxes 

       if (theControl is LiteralControl) 
       { 
        LiteralControl literal = theControl as LiteralControl; 

        //This checks if the Div element I'm looking for exists 
        //If it does, I want to keep it 
        bool contains = literal.Text.Contains ("<div id=\"" + ParentDiv); 
        if (contains) 
         MenuId = ParentDiv; 
       } 

       if (MenuId != ParentDiv) 
       { 
        ctrl.Controls.RemoveAt (i); 
       } 

      } 

這是當我到了LiteralControl一部分出問題。按鈕和文本框工作正常。然而,LiteralControl將我的Div元素砍掉一半,並通過br元素進行過濾。我div元素,看起來像(編輯爲簡潔起見)如下:

<div class="hide" id="TB_24000" > 
<br> 
<Textbox elements> 
<Button elements> 
<Label elements> 
<br> 
<Textbox elements> 
<Button elements> 
<Label elements> 
<br> 
<input type="button" id="btnBack" value="Tilbage" class="BackandResetButtons" onclick="backButton(this,document.getElementById('MenuLevel1'),document.getElementById('TB_24000')); return false;"></div> 

但我LiteralControl元素看起來如下(未經編輯):

<br><input type="button" id="btnBack" value="Tilbage" class="BackandResetButtons" onclick="backButton(this, document.getElementById('TB_33999'),document.getElementById('TB_38400'));&#xA;   "></div> 

而接下來:

<br><label class="label">FRAGT</label><br> 

而接下來:

<br><label class="label">SPEDITØR</label><br> 

正如你所看到的,我的LiteralControls是基於br元素,但問題是,我想基於Div元素進行篩選。但是,如果不採取骯髒和坦率的不必要的手段,這似乎是不可能的。

所以我的問題是:如何根據Div元素而不是Br元素過濾?我可以過濾按鈕和文本框添加功能很好,但我的佈局和網站是依賴於我的Div元素在那裏。

+0

你是說,當你調用'ctrl.Controls.RemoveAt(I);'它去除的''

' but leaves the contents and the end of the '
開始? – jmrnet

+0

我想要的div元素有時在LiteralControl元素中,但問題是它有子元素br元素,這就是Literalcontrol始終開始和結束的地方,這實際上意味着我只能得到Div元素的切碎版本,和所有的兒童標籤元素是分開的,因爲他們在他們的前面有br元素(見上) –

回答

1

嘗試關閉您的BR這樣的元素:<br />我認爲解析器被BR元素弄糊塗,沒有結束標記。

+0

我試着刪除
元素,現在它過濾輸入。這個問題似乎並沒有與
元素特別相關,而是ParseControl完全隨意地將HTML轉換爲LiteralControls –