2011-11-24 55 views
0

我有一个web应用程序,它具有一个上传功能,用于由国际象棋软件生成的HTML文件,以便能够包含一个再现棋牌游戏的javascript播放器。使用c修复malformatted html属性

我不喜欢在一个框架中加载上传的文件,所以我通过解析文件的动态部分来重建由软件生成的HTML和JavaScript。

HTML的问题是所有属性值都用撇号而不是引号括起来。我正在寻找一种方法来解决这个问题,使用库或正则表达式替换使用C#。

的HTML如下:

<DIV class='pgb'><TABLE class='pgbb' CELLSPACING='0' CELLPADDING='0'><TR><TD> 

,我将它转化为:

<DIV class="pgb"><TABLE class="pgbb" CELLSPACING="0" CELLPADDING="0"><TR><TD> 
+5

这不是格式错误的HTML,单引号是完全有效的并且非常常见。 – Kobi

+0

您正试图解决一个不存在的问题。 – Oded

+0

将此HTML与带有双引号的HTML结合使用时,它会成为问题 – jhoefnagels

回答

0

你可以使用类似:

string ouputString = Regex.Replace(inputString, @"(?<=\<[^<>]*)\'(?=[^<>]*\>)", "\""); 

俄德的言论后改变了它,这会使主体HTML完好无损。但我同意,正则表达式对解析HTML是一个坏主意。马克的回答比较好。

+0

它将替换HTML正文中的撇号以及属性分隔符。这不是一个好的解决方案。 – Oded

+0

那么......在这种情况下:(iString,@“(?<=\<[^\<\> *)\'(?= [^ \ <>] * \>)”,“\”“) – TomL

+1

我只能说是:http://stackoverflow.com/q/1732454/1583 – Oded

1

我想说你最好的选择是使用类似HTML Agility Pack的东西来解析生成的HTML,然后让它重新序列化为字符串(希望纠正过程中的任何格式问题)。 Any attempt at Regexes or other direct string manipulation of HTML is going to be difficult, fragile and broken...


实施例(当你的HTML被存储在一个文件在硬盘上):

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
doc.Save("file.htm"); 

另外,也可以在存储器从string或输入HTML的Stream直接做到这一点。

+0

嗨马克,我试过这个选项,但它留下了单引号,因为它是有效的HTML。它确实修复了标签外壳。 – jhoefnagels