這是第一個問題,我在這個網站問,所以我爲我提前做出任何道歉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'));
 "></div>
而接下來:
<br><label class="label">FRAGT</label><br>
而接下來:
<br><label class="label">SPEDITØR</label><br>
正如你所看到的,我的LiteralControls是基於br
元素,但問題是,我想基於Div
元素進行篩選。但是,如果不採取骯髒和坦率的不必要的手段,這似乎是不可能的。
所以我的問題是:如何根據Div
元素而不是Br
元素過濾?我可以過濾按鈕和文本框添加功能很好,但我的佈局和網站是依賴於我的Div
元素在那裏。
你是說,當你調用'ctrl.Controls.RemoveAt(I);'它去除的''
我想要的div元素有時在LiteralControl元素中,但問題是它有子元素br元素,這就是Literalcontrol始終開始和結束的地方,這實際上意味着我只能得到Div元素的切碎版本,和所有的兒童標籤元素是分開的,因爲他們在他們的前面有br元素(見上) –