Der Wert eines Attributs von XPath und HtmlAgilityPack
Ich habe ein HTML-Dokument und ich parse es mit XPath. Ich möchte den Wert des Elements input, aber es hat nicht funktioniert.
Mein Html:
<tbody>
<tr>
<td>
<input type="text" name="item" value="10743" readonly="readonly" size="10"/>
</td>
</tr>
</tbody>
Mein code:
using HtmlAgilityPack;
HtmlAgilityPack.HtmlDocument doc;
HtmlWeb hw = new HtmlWeb();
HtmlNodeCollection node = doc.DocumentNode.SelectNodes("//input/@value");
string s=node[0].InnerText;
So ich will den Wert: "10743" (und ich kümmere mich nicht um anderen tags mit der Antwort.)
- Haben Sie versucht, die
node[0].Value
? - Nein, denn ich will den Wert von der
node[0].InnerText
- Aber ein Attribut nicht über eine
InnerText
. - Ja, mein problem muss ich da verwenden
InnerText
denn dies ist in der Schleife, Aber ich kümmere mich nicht um den ganzen text einschließlich der element.<td> <input type="text" name="item" value="10743" readonly="readonly" size="10"/> </td>
. Aber wie? - Ich denke, du bist nicht immer mein Punkt. Sie sind die Auswahl von Attributen. Diese haben nur eine
Value
, nicht einInnerText
. - Ja, ich habe es Erwischt, aber gibt es keine andere Möglichkeit? ein trick oder sowas? Auch bekommen Sie weitere tags, die ich nicht brauchen, zusätzlich zu dem Wert. So wird das element innerText von einem anderen tag.
- Haben Sie vergessen, uns zu sagen, was genau Sie wollen zu bekommen, wie das Ergebnis der Auswertung des XPAth-Ausdrucks: ein Objekt, ein string,..., was genau saite...?
- Ich fügte hinzu, in der Frage, was ich genau will.
- Könnten Sie, bitte, die komplette C# - code und die vollständige HTML-Dokument? Aus dem code-snippet, das es scheint, dass Sie nicht mit HtmlAgilityPack überhaupt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie es in
.Attributes
Sammlung:Können Sie auch direkt schnappen Sie das Attribut, wenn Sie die
HtmlNavigator
.System.Xml.Linq.XDocument
funktioniert genauso und ist sehr gut lesbar XPath-one-Liner. Danke, @Pierluc!Update2: Hier ist ein code Beispiel, wie man Werte von Attributen mithilfe von Html-Agility-Pack:
http://htmlagilitypack.codeplex.com/wikipage?title=Examples
Müssen Sie selbstverständlich passen Sie diesen code an Ihre Bedürfnisse-zum Beispiel werden Sie nicht ändern Sie die Attribute, aber gerade
att.Value
.Update: Sie können auch einen Blick auf diese Frage:
Auswahl der Attribut-Werte mit dem html-Agility-Pack
Dein problem ist wahrscheinlich ein Standard-namespace problem - Suche nach "XPath-Standard-namespace c#", und Sie werden viele gute Lösungen (Hinweis: benutzen Sie die überlastung von
SelectNodes()
, dass eineXmlNamespaceManager
argument).Der folgende code zeigt, was bekommt man für ein Attribut in einem Dokument, in "no namespace":
Das Ergebnis nach der Ausführung dieses app ist:
Nun, für ein Dokument, das in einer Standard-namespace:
Läuft diese app erzeugt erneut das wollte Ergebnisse: