我試圖用<p>example content</p>
替換<p>example content</p>
example content<br><br>
這是我目前的代碼:
static string replaceParagraphs(string s) // Replace p tags with BR
{
HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.LoadHtml(s);
doc.OptionWriteEmptyNodes = false;
HtmlNode linebreak1 = doc.CreateElement("br");
HtmlNode linebreak2 = doc.CreateElement("br");
var paragraphTags = doc.DocumentNode.SelectNodes("p");
for (int i = 0; i < paragraphTags.Count; i++)
{
if (i > 0)
{
doc.DocumentNode.InsertBefore(linebreak1, paragraphTags[i]);
doc.DocumentNode.InsertBefore(linebreak2, paragraphTags[i]);
}
doc.DocumentNode.InsertBefore(HtmlNode.CreateNode(paragraphTags[i].InnerHtml), paragraphTags[i]);
paragraphTags[i].ParentNode.RemoveChild(paragraphTags[i]);
}
return doc.DocumentNode.OuterHtml;
}
這是我傳遞給方法的示例文檔:
<div id=JobDetailSection class=details>
<h1>Admin Officer (Rodney House)</h1>
<dl>
<dd><span>Ref: </span>RH/AO/SS</dd>
<dd><span>Employer: </span>Manchester City Council</dd>
<dd><span>Location: </span>Rodney House School, Barrass Street, Openshaw, Manchester, M11 1WP</dd>
<dd><span>Salary: </span>Grade 3 £15,523 to £16,969 per annum pro rata</dd>
<dd><span>Salary Grade: </span>Grade 3 £15,523 to £16,969 per annum pro rata</dd>
<dd><span>Working Pattern: </span>Part Time, Term Time</dd>
<dd><span>Working Hours: </span>15 hours per week</dd>
<dd><span>Contract Type: </span>Temporary</dd>
<dd><span>Closing date: </span>25/09/2015 23:59</dd>
<dd><span>Job Type: </span>Administration/Clerical, School Support Staff</dd>
<dd><span>Interview Date: </span>Tuesday 6th October 2015</dd>
</dl>
<hr>
<div class=description>
<p>The Governors seek to appoint a well motivated, flexible and enthusiastic Admin Support Assistant to join our committed staff team.</p>
<p>The successful candidate will be required to provide general clerical admin and finance support to the school and outreach service while the school develops a project for the LA. The successful candidate will also be able to demonstrate high
standards of literacy, numeracy and ICT skills. </p>
<p>Rodney House works in close collaboration with Manchester’s Children’s Centres. A commitment to working with our partner settings is essential. Rodney House delivers an Outreach Service which requires the production and maintenance of support
packages</p>
<p>All posts are subject to satisfactory references and an enhanced DBS check.
<br>Prospective candidates need to know that we apply our stringent policy on Safeguarding children when appointing staff to Rodney House.</p>
<p>Visits to the school are encouraged and welcomed by appointment.</p>
<p>
<br>
<strong>How to apply - information for applicants.<br>
</strong>If you are interested in this vacancy, please download the documents attached.
<br>Completed applications can be emailed to <a href=mailto:admin@example.com>admin@example.com</a> CV's will not be accepted.</p>
<p>Closing date: - Friday 25th September at noon. Short listing on the same day.
<br>Interview Date: Tuesday 6th October 2015</p>
<p>Only those shortlisted for interview will be informed. No agencies please.</p>
<p><strong>Equal Opportunities statement<br>
</strong>We are an Equal Opportunities Employer and we positively welcome applications from all candidates regardless of age, disability, gender reassignment, marriage and civil partnership, pregnancy and maternity, race, religion or belief, sex and sexual
orientation.</p>
<p> </p>
<p> </p>
</div>
<p><a class=button print href=Javascript:window.print()>Print</a>
</p>
</div>
我有輸出數據的兩個問題首先是當應該有兩個時插入多個br
標籤的事實,並且由於某種原因,當我檢查輸出時,字符串中缺少文本的最後部分: and we positively welcome applications from all candidates regardless of age, disability, gender reassignment, marriage and civil partnership, pregnancy and maternity, race, religion or belief, sex and sexual
我不確定是什麼導致了這些問題。
由於您使用的是C#,為什麼不使用XSLT進行處理?我知道你不是在問它,但你不必處理在逐個節點“手動”執行此操作時要處理的所有怪癖:
<xsl:output method="html" />
<!-- boilerplate, identity-template, leaves everything not matched exactly the same -->
<xsl:template match="* | @*">
<xsl:copy>
<xsl:apply-templates select="@* | *" />
</xsl:copy>
</xsl:template>
<!-- the actual business logic, does all you need -->
<xsl:template match="p">
<xsl:copy-of select="node()" />
<br /><br />
</xsl:template>
您可以使用HtmlAgilityPack將HTML作為DOM文檔節點獲取,您可以將其提供給.NET的XslCompiledTransform
。
對不起,我無法輕易發現上面代碼中的錯誤,但那是因為我發現節點操作如此繁瑣且相對難以正確,所以我嘗試使用更簡單的解決方案;)。