0

简单地说,我的 HTML 看起来像这样:

<ul>
  <li>Unorderd Item 1</li>
  <li>Unordered Item 2</li>
  <li>Unordered Item 3
    <ol>
       <li>Ordered Item 1</li>
       <li>Ordered Item 2</li>
    </ol>
  </li>
  <li>Unordered Item 4</li>
</ul>

我正在寻找一个正则表达式或某种性质的逻辑,<li>根据它的父列表元素是什么来替换标签。

我可以直接使用 RegEx,也可以使用(很可能是我的路线).Net System.Text.RegularExpressions 类,所以:

正则表达式替换

正则表达式匹配

<-- 我知道我可以/应该使用 HTML 解析器,但这与 XSLT 配置文档结合使用。所以使用正则表达式似乎是最好的方法。-->

期望的输出:

<ul>
   <Unordered>Unordered Item 1</Unordered>
   <Unordered>....</Unordered>
     <ol>
        <Ordered>......</Ordered>
        <Ordered>......</Ordered>
     </ol>
   <Unordered>.....</Unordered>
 </ul>  
4

1 回答 1

0

我会为此使用HtmlAgilityPack

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlString);

foreach (var li in doc.DocumentNode.Descendants("li"))
{
    if (li.ParentNode.Name == "ul") li.Name = "Unordered";
    if (li.ParentNode.Name == "ol") li.Name = "Ordered";
}

var newHtml = doc.DocumentNode.OuterHtml;

输出:

<ul>
  <unordered>Unorderd Item 1</unordered>
  <unordered>Unordered Item 2</unordered>
  <unordered>Unordered Item 3
    <ol>
       <ordered>Ordered Item 1</ordered>
       <ordered>Ordered Item 2</ordered>
    </ol>
  </unordered>
  <unordered>Unordered Item 4</unordered>
</ul> 
于 2013-07-11T19:44:51.303 回答