这是我在这个网站上提出的第一个问题,所以我对我提前做出的任何错误表示歉意,但是我会尽可能地提出这个问题。
我发现我的问题有点难以解释,但归结为:
我有一大串 HTML,它是通过从 Web 服务中检索 XML 文件并使用 XSLT 将其转换为一大串 HTML 来生成的。然后我将其解析为一个 Control 集合,添加一些事件处理程序并将其添加到 HTMLPlaceholder 和万岁一切正常。
但是,由于这个 HTML 字符串几乎包含了我的整个网站,并且正在无法一次处理所有标记的手持终端上运行,因此我过滤了我发送的标记,但这会带来一个问题。
Div
元素不能被过滤掉而不丢失Div
我想要保留的元素。这是因为 Parsecontrol 将我的Div
元素切成两半并将它们转换为按br
元素排序的 Literalcontrols。
显示我的代码有点困难,但这里是一个例子:
//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
元素。