Da HtmlAgilityPack in Windows Phone 8.1 noch nicht unterstützt wird, war die manuelle Referenzierung im Projekt eine Tricklösung. Aber das ist nicht das einzige Problem. Ich könnte XPath
für mein früheres Projekt verwenden, um Knoten auszuwählen. Jetzt kann ich sehen, dass HtmlDocumentNode.SelectNode()
-Funktion nicht mehr ist (wegen der Versionskompatibilität möglicherweise).
Was ich in meinem früheren Projekt verwendet habe, war ähnlich
HtmlNode parent = document.DocumentNode.SelectSingleNode("//ul[@class='songs-list1']");
HtmlNodeCollection x = parent.ChildNodes;
Ich habe über Stackoverflow und Google gesucht und eine Idee bekommen, dass es immer noch möglich ist, Knoten mit Linq auszuwählen.
Ich suche nach einem Code-Block, der wie SelectNodes
, SelectNode
.
HtmlDocument
wäre wünschenswert, das HtmlDocument
asynchron zu HtmlDocument
.
Wenn Sie Ihren aktuellen Code übersetzen möchten, der XPath verwendet, um LINQ zu verwenden, dann wird dies tun:
HtmlNode parent = document.DocumentNode
.Descendants("ul")
.FirstOrDefault(o => o.GetAttributeValue("class", "")
== "songs-list1")
HtmlNodeCollection x = parent.ChildNodes;
Aber wenn Sie erwarten, Methoden zu finden, XPath in HtmlAgilityPack-Version für Windows Phone 8.1 Universal-Apps oder Windows RT (" Ich bin für einen Block von Code, der wie SelectNodes
, SelectNode
") zu SelectNode
, Sie besser nicht: HtmlAgilityPack & Windows 8 Metro Apps (Antwort des Autors von HAP).
Sie können dies mit der Methode Element / s tun:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlString);
var h6Nodes = from h6element in doc.DocumentNode.Element("body").Element("center").Elements("h6")
where h6element.Attributes["class"].Value.Equals("songs-list")
select h6element;
Dies setzt voraus, dass Sie etwas Ähnliches haben
string htmlString = @"<html>
<body>
<center>
<h6>Hello </h6>
<h6>World! </h6>
<h6 class=""songs-list"">
Insert that one song here
</h6>
</center>
</body>
</html>"
und das wird den Knoten <h6>
mit der Liste der Klassenlieder erhalten.