我有一个很大的html文件(80个月),如:
<html>
<head>...</head>
<body>
<div class="nothing">...</div>
<div class="content">
<h1>Hello</h1>
<div>
<div class="phone"> ... </div>
<div class="phone"> ... </div>
<div class="phone"> ... </div>
</div>
<div>
<div class="phone">
...
<div>
...
</div>
...
</div>
<div class="phone"> ... </div>
</div>
<div>
<div class="phone"> ... </div>
<div class="phone"> ... </div>
<div class="phone"> ... </div>
<div class="phone"> ... </div>
</div>
</div>
</body>
</html>
我无法手动修改此html文件,因此最好保持只读。
我想将<div class="phone"> ... </div>
的每一行存储在一个字符串表中,以便以后能够操作它。在div中,还有其他元素可以是任何东西。
我使用的正则表达式是:
Regex.Matches(myHtml, "<div class=\"phone\">[\\p{L}\\s]*\\,*[\\p{L}\\s]*<div");
这个正则表达式需要每个
<div class="phone"> ANY UTF8 char </div>
但问题是:这个正则表达式获取所有UTF8字符,直到它找到下一个</div>
,但是这个结束div不一定是第一个开始div的结束div。
我有什么想法可以做到这一点?我们不能在不同的字符串中剪切此文件以便能够将其加载到htmlDocument中吗?
感谢。
答案 0 :(得分:2)
您可以使用XmlReader
类来读取文件。 XmlReader
不会将整个文件加载到内存中,但允许您在动态解析文档时逐节点地移动XML文档。
有关如何使用class = phone:
读取所有div的内容的示例using (XmlReader reader = XmlReader.Create(@"C:\A.html"))
{
// Loop over all xml tags
while (reader.Read())
{
// Check we have a div whith attribute class = phone
if(reader.Name == "div" && reader.GetAttribute("class") == "phone")
{
// Yes, so read until the corresponding closing tag and output content
textBox1.AppendText(reader.ReadInnerXml() + Environment.NewLine);
}
}
}
有关详细信息,请参阅documentation。
答案 1 :(得分:-1)
您可以使用jQuery循环使用类phone
的所有元素,并将它们存储在HiddenField
中。然后在PostBack上,您可以访问这些值并进行处理。
<asp:HiddenField ID="HiddenField1" runat="server" />
<script type="text/javascript">
function getValues() {
var valueArray = new Array();
var valueString = "";
$(".phone").each(function (index, element) {
//for demo store both in hiddenfield and javascript array
valueArray.push(element.innerHTML);
valueString += element.innerHTML + ",";
});
$("#<%=HiddenField1.ClientID %>").val(valueString);
}
</script>
在代码隐藏中:
protected void Button1_Click(object sender, EventArgs e)
{
string valueString = HiddenField1.Value;
if (!string.IsNullOrEmpty(valueString))
{
string [] valueArray = valueString.TrimEnd(',').Split(',');
foreach (string s in valueArray)
{
//do stuff
}
}
}