[英]How to parse HTML to modify all words
這似乎是一個反復出現的問題,但這里有。
我有格式良好的HTML(它來自受控源,所以這可以被認為是給定的)。 我需要遍歷HTML正文的內容,查找文檔中的所有單詞,對這些單詞執行一些編輯,然后保存結果。
例如,我有文件sample.html,我想通過我的應用程序和產品output.html運行它,這與原始文件完全相同,加上我的編輯。
我發現以下使用HTMLAgilityPack,但我發現的所有示例都是查看指定標記的屬性 - 是否有一個簡單的修改,它將查看內容並執行我的編輯?
HtmlDocument HD = new HtmlDocument();
HD.Load (@"e:\test.htm");
var NoAltElements = HD.DocumentNode.SelectNodes("//img[not(@alt)]");
if (NoAltElements != null)
{
foreach (HtmlNode HN in NoAltElements)
{
HN.Attributes.Append("alt", "no alt image");
}
}
HD.Save(@"e:\test.htm");
以上是查找沒有ALT標簽的圖像標簽。 我想查找文件的<body>
中的所有標記,並對內容執行某些操作(可能涉及在此過程中創建新標記)。
我可能做的一個非常簡單的示例是采用以下輸入:
<html>
<head><title>Some Title</title></head>
<body>
<h1>This is my page</h1>
<p>This is a paragraph of text.</p>
</body>
</html>
並產生輸出,它取每個單詞並交替使其成為大寫並使其成斜體:
<html>
<head><title>Some Title</title></head>
<body>
<h1>THIS <em>is</em> MY <em>page</em></h1>
<p>THIS <em>is</em> A <em>paragraph</em> OF <em>text</em>.</p>
</body>
</html>
想法,建議?
就個人而言,鑒於此設置,我將使用HtmlNode的InnerText屬性來查找單詞(可能使用Regex,因此我可以排除標點符號而不是簡單地依賴空格)然后使用InnerHtml屬性使用迭代調用進行更改到Regex.Replace(因為Regex.Replace有一個方法,允許你指定開始位置和要替換的次數)。
處理代碼:
IEnumerable<HtmlNode> nodes = doc.DocumentNode.DescendantNodes().Where(n => n.InnerText == "something");
foreach (HtmlNode node in nodes)
{
string[] words = getWords(node.InnerText);
node.InnerHtml = processHtml(node.InnerHtml, words);
}
識別單詞(可能有一些更明智的方法來做到這一點,但這是一個初始的刺傷):
private string[] getWords(string text)
{
Regex reg = new Regex("/w+");
MatchCollection matches = reg.Matches(text);
List<string> words = new List<string>();
foreach (Match match in matches)
{
words.Add(match.Value);
}
return words.ToArray();
}
處理html:
private string processHtml(string html, string[] words)
{
int startPosition = 0;
foreach (string word in words)
{
startPosition = html.IndexOf(word, startPosition);
Regex reg = new Regex(word);
html = reg.Replace(html, alterWord(word), 1, startPosition);
}
return html;
}
我會把alterWord()的細節留給你。 :)
嘗試.SelectNodes("//body//*")
。 這將獲得任何body
元素中任何深度的所有元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.