使用 Xpath 或 HtmlAgilityPack 获取字符串中的嵌套节点

Get the nested nodes in a string with Xpath or HtmlAgilityPack

在服务器上,我通过 AJAX 从客户端 JS 返回一个 HTML 片段作为字符串。内容是嵌套的 DIV,包含 ul、li 项。 HTML DIv snippet

<div> //please see link above
        <ul class="tree" id="ulID" name="input">
            <li><span class="vertical..."></span>
                <div></span>1</div>
                <ul>..
</div>

我正在使用 C# HtmlAgilityPack,但我无法获取嵌套内容来提取数据,然后再添加数据。

下面是部分代码。

 HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

// nested
htmlDoc.OptionFixNestedTags=true;

bool failed = false;

// Use:  htmlDoc.LoadHtml(htmlString); 

// ParseErrors is an ArrayList 
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
    // Handle any parse errors as required
    // check if string was JSON formatted
    if (htmlDoc.LoadHtml(JSONdeserialize(htmlString)).ParseErrors.Count() > 0) failed = true;
}
else
{

    if (htmlDoc.DocumentNode != null)
    {
        HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//ulID");

        if (bodyNode != null)
        {
            // **how can I get the contents of the node here??****
            // what is the xpath to get all the structured contents so I can walk the tree
            // If option walk tree
            // How can I build foreach(HTMLnode node in nodes) nested array
        }
    }
}
  1. select DOM 字符串中所有内容的 Xpath 是什么,当我没有正文时,只有 Div enclosed string.
  2. 如何提取所有节点及其嵌套级别的内容
  3. 关于如何保存这个结构有什么建议吗?这样我就可以轻松恢复它了?

我不确定您现在的 Xpath 是否正确。 我也不确定第一个 ul 标签何时结束。如果它在 div 关闭之前结束。然后你就可以使用这个xpath了。

"//ul[@id='ulID']"

然后你得到第一个ul htmlnode。然后你可以遍历它的children。 我强烈建议你看一些 xpath examples.