【发布时间】:2010-08-18 22:41:13
【问题描述】:
我想知道这是否可能。
我有这样的html:
<p>
<font face="Georgia">
<b>History</b><br> <br>Two of the polysaccharides used in the manufacture of...</font>
<a title="PubMed" href="http://www.www.gov/pubmed/" target="_blank">
<font face="Georgia">) and this web site for new development by...well as Self Affirmed Medical Food GRAS status.
</font>
</p>
<p>
<font face="Georgia">[READMORE]</font>
</p>
<p><font face="Georgia"><br><strong>Proprietary Composition</strong><br>
<br>The method in which soluble fibres are made into... REST OF ARTICLE...
</p>
是的,它是丑陋的 html,它来自所见即所得,所以我几乎无法控制它。
我想做的是在文档中搜索 [READMORE],删除所有父标签(在本例中为 <font> 和 <p> 标签)并将它们替换为阅读更多链接,同时将文档的 REST 包装在一个巨大的`...文章的其余部分...
我很确定 HtmlAgilityPack 将帮助我实现这一目标,但我只是想弄清楚从哪里开始。
到目前为止,我很确定我必须使用 htmlDoc.DocumentNode.SelectSingleNode(//p[text()="[READMORE]"]) 或其他东西。我对 XPATH 不太熟悉。
对于我的文档,readmore 可能会也可能不会在嵌套的font 标记中。
此外,在某些情况下,它可能根本不在标签中,而是在文档根目录中。在这种情况下,我可以进行常规搜索和替换,它应该很简单。
我的理想情况是这样的(伪代码)
var node = SelectNodeContaining("[READMORE]").
node.Replace( "link here" );
node.RestOfDocument().Wrap("<div class='wrapper'");
我知道,我在做梦……但我希望这是有道理的。
【问题讨论】:
-
您是否考虑过在发送所见即所得的输出之前执行此客户端?
-
使用 XSLT 最容易做到这一点。添加“xslt”标签,您几乎会立即收到许多好的答案。
-
@Dimitre。谢谢小费。完成。
-
_-Ib:请参阅我对 XSLT 解决方案的回答,该解决方案可以完全根据您的要求转换您的文档。
标签: c# xslt xpath html-agility-pack domparser