首页 新闻 会员 周边 捐助

Html字符串 Col的宽度 赋值给对应的TD 最后去除Col标签.要用C#实现 倾家荡产了- -

0
悬赏园豆:80 [已解决问题] 解决于 2013-12-06 09:04

首先我希望是对于HTML结构理解比较深刻的前辈进来看看

最好是理解C#的 因为我现在有一个需求是这样的。

有类似这样的HTML字符串代码 其中有若干Col标签  我需要获取Col标签中的宽度 可能有两种(一是style="width:90px",二是width=90px)

然后赋值给相应的TD.不能使用将HTML字符串转换成XML来做  提示一下  使用递归。我这个需求难住我了 逻辑很简单 但是实现起来确实有点麻烦 希望前辈们支招 给出代码的最好 我一般没伸手党过 谢谢!

HTML字符串如下

<table cellspacing=0 cellpadding=0 width='100%'><tr><td><table valign='top' cellspacing='0' cellpadding='0' border='0' width='100%'><tr><td><table valign='top' cellspacing=0 cellpadding=0 class='secTable' width='100%' height='1%' style='display:block;'><tr valign='top'><td class='formCell' colspan='2'><table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'><col style='width:90px'/><col/><tr><td class='cellLabel' >名称:</td><td class='relatedInfoContent'>aaaaaa</td></tr></table></td></tr><tr valign='top'><td class='formCell'><table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'><col style='width:90px'/><col style='width:100px;' /><col /><tr><td colspan='2' class='cellLabel' >客户:</td><td class='relatedInfoContent'>Aaronrdg</td></tr></table></td><td class='formCell'><table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'><col style='width:90px'/><col/><tr><td class='cellLabel' >报价人:</td><td class='relatedInfoContent'>檀庭</td></tr></table></td></tr><tr valign='top'><td class='formCell'><table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'><col style='width:90px'/><col/><tr><td class='cellLabel' >报价时间:</td><td class='relatedInfoContent'>2013-10-29 16:41</td></tr></table></td><td class='formCell'><table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'><col style='width:90px'/><col/><tr><td class='cellLabel'  style='text-align:0;'></td><td class='relatedInfoContent'></td></tr></table></td></tr></table></td></tr></table></td></tr><tr><td><table valign='top' cellspacing='0' cellpadding='0' border='0' width='100%'><tr height='18'><td class='sec bar'>商品清单</td></tr><tr height=5><td></td></tr><tr><td><table valign='top' cellspacing=0 cellpadding=0 class='secTable' width='100%' height='100%' style='display:block;'><col width='50%'/><col width='50%'/><tr valign='top' height='100%'><td class='formCell' colspan='2'><table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:115px;'><col/><tr><td class='relatedInfoContent' style='padding-bottom:3px;'><table class='printTable' border='0' cellspacing='0' cellpadding='3'><tr><td class='printTdHeader' width='125' align='left'>描述</td><td class='printTdHeader' width='125' align='left'>规格</td><td class='printTdHeader' width='50' align='left'>数量</td><td class='printTdHeader' width='75' align='left'>单价 (¥)</td><td class='printTdHeader' width='75' align='left'>小计 (¥)</td></tr><tr><td  class='printTd' align='left'>成本测试</td><td  class='printTd' align='left'>成本测试规格1</td><td  class='printTd' align='left'>2.00</td><td  class='printTd' align='left'>¥2,614.40</td><td  class='printTd' align='left'>¥5,228.80</td></tr><tr><td  class='printTd' align='left'>校园网站标准版</td><td  class='printTd' align='left'>&nbsp;</td><td  class='printTd' align='left'>2.00</td><td  class='printTd' align='left'>¥33.00</td><td  class='printTd' align='left'>¥66.00</td></tr><tr><td  class='printTd' align='left'>成本测试</td><td  class='printTd' align='left'>成本测试规格2</td><td  class='printTd' align='left'>1.00</td><td  class='printTd' align='left'>¥3,300.00</td><td  class='printTd' align='left'>¥3,300.00</td></tr><tr><td  class='printTd' align='left'>参数5</td><td  class='printTd' align='left'>&nbsp;</td><td  class='printTd' align='left'>1.00</td><td  class='printTd' align='left'>¥1.00</td><td  class='printTd' align='left'>¥1.00</td></tr><tr><td  class='printTd' align='left'>参数8</td><td  class='printTd' align='left'>&nbsp;</td><td  class='printTd' align='left'>1.00</td><td  class='printTd' align='left'>¥2.00</td><td  class='printTd' align='left'>¥2.00</td></tr><tr><td  class='printTd' align='left'>参数9</td><td  class='printTd' align='left'>&nbsp;</td><td  class='printTd' align='left'>1.00</td><td  class='printTd' align='left'>¥4.00</td><td  class='printTd' align='left'>¥4.00</td></tr><tr><td  class='printTd' align='left'>总价</td><td  class='printTd' align='left'>&nbsp;</td><td  class='printTd' align='left'>0.00</td><td  class='printTd' align='left'>¥0.00</td><td  class='printTd' align='left'>¥8,601.80</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table>

何小宝的主页 何小宝 | 初学一级 | 园豆:19
提问于:2013-12-03 19:10
< >
分享
最佳答案
0

我明白你的意思,之前帮同事写过类似的代码,我特地帮你写了个例子,你去看看:http://runjs.cn/detail/mionbp9z

收获园豆:80
袁家小黑球 | 小虾三级 |园豆:1045 | 2013-12-04 17:06

还真是类似的问题 不过我那个只是一个简单的HTML字符串 实际情况可能复杂点

这个换成C# 该怎么还- - JQ自己封装了太多东西。

何小宝 | 园豆:19 (初学一级) | 2013-12-04 17:14

  我在修改一下,解决动态读取元素属性的问题,等我消息

-------------------------

修改好了,http://runjs.cn/detail/mionbp9z

 

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-12-04 17:22

@何小宝: 给你个思路, C# 可以将html片段转换成document对象,然后就可以类似操作dom一样操作元素了。

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-12-04 17:45

@袁家小黑球: 回复小黑球。谢谢一直关注  其实使用XML的方式已经实现了。就是你说的Document对象。

只不过现在上司说XML那种方式可能不是很通用。他的意思是使用直接操作字符串这种方式通用性上考虑的。

这个东西我还在思考 思路需要拟清楚 其实不难 就是逻辑比较繁琐一点。

何小宝 | 园豆:19 (初学一级) | 2013-12-05 09:27

@何小宝: 你正则用的熟练么? 我可以用正则帮你实现,不错处理的过程有点复杂而已,我说一下思路:

1. 利用正则匹配出,字符串中所有的table, 你会得到若干个table ,存储子啊MatchCollection中

2. 遍历 MatchCollection, 检查那些Table下面有col 元素,正则很容易判断出来,将这些Match 保存到一个新的数组中备用(加入放在TableMatchs这个变量中)

3. 利用正则,可以获取到Table的每一行tr中的特定的td的,也很容易获取对应的col ,这一步我说的简单,是因为,如果你很熟悉写正则,这步就不难的,配合正则的replace方法就可以了。

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-12-05 09:43

@何小宝:  yuanjiaheiqiu@sina.cn 邮件给我,描述你遇到的问题,如果不是写起来太麻烦,我就帮你写了,呵呵

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-12-05 13:50

@袁家小黑球: 已发。

何小宝 | 园豆:19 (初学一级) | 2013-12-05 14:03

@袁家小黑球: 是不是不太好解决?

何小宝 | 园豆:19 (初学一级) | 2013-12-05 17:08

@何小宝: 我写的demo已经发送到你邮箱了,你理解一下。

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-12-05 22:17

@袁家小黑球: 给您发了一个邮件 您看看  我先把帖子结了

何小宝 | 园豆:19 (初学一级) | 2013-12-06 09:03

@袁家小黑球: 

前辈 你的例子我看了 我还是没能实现 能否抽时间帮我完善一下呢。

好像用正则实现不了 我的需求 我看了思路

何小宝 | 园豆:19 (初学一级) | 2013-12-09 11:43

@何小宝: 这2天有点忙,具体遇到啥问题了?

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-12-11 09:45
其他回答(4)
0

没明白你的问题,代码最好是能格式化一下然后用插入代码的方式贴进来,或者把你最终的效果截个图下来,这样好理解你的问题一些。

I,Robot | 园豆:9783 (大侠五级) | 2013-12-03 21:57

<table cellspacing=0 cellpadding=0 width='100%'>
<tr>
    <td>
        <table valign='top' cellspacing='0' cellpadding='0' border='0' width='100%'>
        <tr>
            <td>
                <table valign='top' cellspacing=0 cellpadding=0 class='secTable' width='100%' height='1%' style='display:block;'>
                <tr valign='top'>
                    <td class='formCell' colspan='2'>
                        <table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'>
                        <col style='width:90px'/><col/>
                        <tr>
                            <td class='cellLabel'>
                                名称:
                            </td>
                            <td class='relatedInfoContent'>
                                aaaaaa
                            </td>
                        </tr>
                        </table>
                    </td>
                </tr>
                <tr valign='top'>
                    <td class='formCell'>
                        <table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'>
                        <col style='width:90px'/><col style='width:100px;'/><col/>
                        <tr>
                            <td colspan='2' class='cellLabel'>
                                客户:
                            </td>
                            <td class='relatedInfoContent'>
                                Aaronrdg
                            </td>
                        </tr>
                        </table>
                    </td>
                    <td class='formCell'>
                        <table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'>
                        <col style='width:90px'/><col/>
                        <tr>
                            <td class='cellLabel'>
                                报价人:
                            </td>
                            <td class='relatedInfoContent'>
                                檀庭
                            </td>
                        </tr>
                        </table>
                    </td>
                </tr>
                <tr valign='top'>
                    <td class='formCell'>
                        <table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'>
                        <col style='width:90px'/><col/>
                        <tr>
                            <td class='cellLabel'>
                                报价时间:
                            </td>
                            <td class='relatedInfoContent'>
                                2013-10-29 16:41
                            </td>
                        </tr>
                        </table>
                    </td>
                    <td class='formCell'>
                        <table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:100%;'>
                        <col style='width:90px'/><col/>
                        <tr>
                            <td class='cellLabel' style='text-align:0;'>
                            </td>
                            <td class='relatedInfoContent'>
                            </td>
                        </tr>
                        </table>
                    </td>
                </tr>
                </table>
            </td>
        </tr>
        </table>
    </td>
</tr>
<tr>
    <td>
        <table valign='top' cellspacing='0' cellpadding='0' border='0' width='100%'>
        <tr height='18'>
            <td class='sec bar'>
                商品清单
            </td>
        </tr>
        <tr height=5>
            <td>
            </td>
        </tr>
        <tr>
            <td>
                <table valign='top' cellspacing=0 cellpadding=0 class='secTable' width='100%' height='100%' style='display:block;'>
                <col width='50%'/><col width='50%'/>
                <tr valign='top' height='100%'>
                    <td class='formCell' colspan='2'>
                        <table cellpadding='0' cellspacing='0' border='0' style='width:100%;height:115px;'>
                        <col/>
                        <tr>
                            <td class='relatedInfoContent' style='padding-bottom:3px;'>
                                <table class='printTable' border='0' cellspacing='0' cellpadding='3'>
                                <tr>
                                    <td class='printTdHeader' width='125' align='left'>
                                        描述
                                    </td>
                                    <td class='printTdHeader' width='125' align='left'>
                                        规格
                                    </td>
                                    <td class='printTdHeader' width='50' align='left'>
                                        数量
                                    </td>
                                    <td class='printTdHeader' width='75' align='left'>
                                        单价 (¥)
                                    </td>
                                    <td class='printTdHeader' width='75' align='left'>
                                        小计 (¥)
                                    </td>
                                </tr>
                                <tr>
                                    <td class='printTd' align='left'>
                                        成本测试
                                    </td>
                                    <td class='printTd' align='left'>
                                        成本测试规格1
                                    </td>
                                    <td class='printTd' align='left'>
                                        2.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥2,614.40
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥5,228.80
                                    </td>
                                </tr>
                                <tr>
                                    <td class='printTd' align='left'>
                                        校园网站标准版
                                    </td>
                                    <td class='printTd' align='left'>
                                        &nbsp;
                                    </td>
                                    <td class='printTd' align='left'>
                                        2.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥33.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥66.00
                                    </td>
                                </tr>
                                <tr>
                                    <td class='printTd' align='left'>
                                        成本测试
                                    </td>
                                    <td class='printTd' align='left'>
                                        成本测试规格2
                                    </td>
                                    <td class='printTd' align='left'>
                                        1.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥3,300.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥3,300.00
                                    </td>
                                </tr>
                                <tr>
                                    <td class='printTd' align='left'>
                                        参数5
                                    </td>
                                    <td class='printTd' align='left'>
                                        &nbsp;
                                    </td>
                                    <td class='printTd' align='left'>
                                        1.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥1.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥1.00
                                    </td>
                                </tr>
                                <tr>
                                    <td class='printTd' align='left'>
                                        参数8
                                    </td>
                                    <td class='printTd' align='left'>
                                        &nbsp;
                                    </td>
                                    <td class='printTd' align='left'>
                                        1.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥2.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥2.00
                                    </td>
                                </tr>
                                <tr>
                                    <td class='printTd' align='left'>
                                        参数9
                                    </td>
                                    <td class='printTd' align='left'>
                                        &nbsp;
                                    </td>
                                    <td class='printTd' align='left'>
                                        1.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥4.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥4.00
                                    </td>
                                </tr>
                                <tr>
                                    <td class='printTd' align='left'>
                                        总价
                                    </td>
                                    <td class='printTd' align='left'>
                                        &nbsp;
                                    </td>
                                    <td class='printTd' align='left'>
                                        0.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥0.00
                                    </td>
                                    <td class='printTd' align='left'>
                                        ¥8,601.80
                                    </td>
                                </tr>
                                </table>
                            </td>
                        </tr>
                        </table>
                    </td>
                </tr>
                </table>
            </td>
        </tr>
        </table>
    </td>
</tr>
</table>

 

格式化了  最终效果就是

COL标签的宽度 最终赋值给它下面的对应的TD ?这样可以明白吗?前辈

支持(0) 反对(0) 何小宝 | 园豆:19 (初学一级) | 2013-12-04 08:27
0

如果你在网页上要处理的化.直接用jquery.遍历

$("td").attr("style","");

如果你在页面上,请使用这个:http://www.cnblogs.com/Ivony/p/3447536.html

(里面有api,你看着办)

[秦时明月] | 园豆:738 (小虾三级) | 2013-12-04 09:41

这个满足不了我的需求 好像没有补全的功能 纠错倒是有

支持(0) 反对(0) 何小宝 | 园豆:19 (初学一级) | 2013-12-04 10:30
0

你这个相应的td,规则是什么?其实用Jquery比较容易实现的。

幻天芒 | 园豆:37207 (高人七级) | 2013-12-04 11:12

首先谢谢你的回复 ,因为我需要作为一个工具类文件类文件来使用 所以不考虑服务端语言实现。

环境是asp.net .

没有规则 就是我以上描述的 其实这个转换为XML结构很好实现 但是我们老大说 试着不用XML

一层一层的寻找替换。所以我想尽力试试 

您也可以从简单的考虑一下 比如

这个

<table width="100%" border="1">
    <col width="90px" />
    <col style="width:90px" />
    <col width="90px" />
    <tr>
        <th>
            ISBN
        </th>
        <th>
            Title
        </th>
        <th>
            Price
        </th>
    </tr>
    <tr>
        <td>
            3476896
        </td>
        <td>
            My first HTML
        </td>
        <td>
            $53
        </td>
    </tr>
</table>

 

这是一个简单的带有COL的table   我需要取得Col中的宽度 然后再赋值给它下面的TD.

这段代码最终结果就是

 

<table width="100%" border="1">
    <col width="90px" />
    <col style="width:90px" />
    <col width="90px" />
    <tr>
        <th width="90px">
            ISBN
        </th>
        <th style="width:90px">
            Title
        </th>
        <th width="90px">
            Price
        </th>
    </tr>
    <tr>
        <td width="90px">
            3476896
        </td>
        <td style="width:90px">
            My first HTML
        </td>
        <td width="90px">
            $53
        </td>
    </tr>
</table>

 红色部分COL 标签可以去除了 因为COL标签对应的是一列的TD 这样可以看明白么。 col个数不定 难点在于

第一  是打散字符串 第二是替换  第三是合并。

 

支持(0) 反对(0) 何小宝 | 园豆:19 (初学一级) | 2013-12-04 11:19

@何小宝: 直接找col,然后从col开始,找table,在这之中利用字符串查找,挨个替换。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2013-12-04 11:29

@幻天芒: 能给出实现代码么 感觉这不是三言两语的事。。你指的直接找Col 是指先筛选出所有的Col还是??

支持(0) 反对(0) 何小宝 | 园豆:19 (初学一级) | 2013-12-04 13:17

@何小宝: 一个一个找:找到一个col之后,从这个startIndex找</table>,然后在这个内部做替换,接下来从</table>的索引找下一个col,同样的方式去做。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2013-12-05 12:03
0

jquery获取所有宽度为90px的列,然后遍历循环赋值不行么。

Rookier | 园豆:652 (小虾三级) | 2013-12-04 14:43

90只是我写的一个固定的值 实际上的需求是 可能每一列的宽度不定。

谢谢你的回复  但是我需要用c#来实现  JQ不考虑。 个人情况不一样哈。

这个东西我搞出来写篇日记。确实网上没有人这样处理过。

 

支持(0) 反对(0) 何小宝 | 园豆:19 (初学一级) | 2013-12-04 15:43

@何小宝: 那用正则呢,你这个需求最主要的就是处理这些字符串的吧。。如果不用jq用c#程序去做,那就考虑用正则处理吧。

支持(0) 反对(0) Rookier | 园豆:652 (小虾三级) | 2013-12-09 11:36

@Rookier: 

- - 谢谢回复 我目前正在用正则尝试实现 之前有一个前辈给了例子 不过我还得自己修改。其实思路有点不对。我的这个字符串可能会出现Table嵌套的情况  我目前之实现了一个table的Col替换。

这个小问题折腾我2-3天了

支持(0) 反对(0) 何小宝 | 园豆:19 (初学一级) | 2013-12-09 11:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册