7

这是我在这个网站上提出的第一个问题,所以我对我提前做出的任何错误表示歉意,但是我会尽可能地提出这个问题。

我发现我的问题有点难以解释,但归结为:

我有一大串 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'));&#xA;          "></div>

接下来:

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

接下来:

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

如您所见,我的 LiteralControls 是基于br元素的,但问题是我想基于Div元素进行过滤。但是,如果不诉诸肮脏且坦率地不受欢迎的黑客攻击,这似乎是不可能的。

所以我的问题是:如何根据Div元素而不是Br元素进行过滤?我可以过滤添加功能的按钮和文本框,但我的布局和站点取决于我的Div元素。

4

1 回答 1

1

尝试BR像这样关闭你的元素: <br /> 我认为解析器被BR没有结束标签的元素弄糊涂了。

于 2012-12-19T16:15:14.803 回答