使用Xpath或HtmlAgilityPack

时间:2015-11-05 21:01:11

标签: sql asp.net-mvc xpath html-agility-pack

在服务器上,我通过AJAX从客户端JS获取一个HTML片段作为字符串。内容是带有ul,li项的嵌套DIV。 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. 当我没有正文但简单Div enclosed string时,选择DOM字符串中所有内容的Xpath是什么。
  2. 如何在嵌套级别提取所有节点及其内容
  3. 有关如何保存此结构的任何建议?所以我可以很容易地恢复它?

1 个答案:

答案 0 :(得分:1)

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

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

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