На сервере я возвращаю фрагмент HTML в виде строки через AJAX от клиента JS. Содержимое представляет собой вложенный DIV с элементами ul, li. HTML DIv snippetПолучить вложенные узлы в строке с помощью Xpath или HtmlAgilityPack
<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
}
}
}
- Что такое Xpath, чтобы выбрать все содержимое в DOM строки, когда у меня нет тела, но просто Div enclosed string.
- Как извлечь все узлы и их содержимое на их вложенных уровнях
- Любые рекомендации по сохранению этой структуры? так что я могу легко восстановить его?
Это дает мне все элементы UL, как я могу это сделать для a) всех элементов, b) только элементы 'li', или только объекты' div', указанные ниже списка, я сделал это »// ul [@id = 'ulID'] // li ", но не работает для элементов li – everest
После этого xpath:" // ul [@ id = 'ulID'] "У вас есть один HtmlNode. Вы можете позвонить. bodyNode.ChildNodes - получить HtmlNodeCollection всех дочерних узлов. В цикле foreach вы можете отсортировать их с выражением if как таковым, если (htmlNode.OriginalName == "li"). –
Это даст мне словарь, например список, или как я могу сохранить иерархическое вложение? – everest