Verwenden von HtmlAgilityPack, um den letzten zu erhalten einer HTML-Tabelle

html html-agility-pack html-table

Frage

Ich habe eine HTML-Tabellenstruktur. Ich muss den Wert des ersten <td> im letzten <tr> -Tag abrufen. Hier ist meine Tabellenstruktur. Der Wert, den ich von der Funktion getFinalNodeValue benötige, ist " 3 ".

 <table id="test">
            <tr>
                <td>ID</td>
                <td>Name</td>
                <td>Age</td>
            </tr>
            <tr>
                <td>1</td>
                <td>Yasoda</td>
                <td>21</td>
            </tr>

            <tr>
                <td>2</td>
                <td>Samantha</td>
                <td>25</td>
            </tr>

            <tr>
                <td>3</td>
                <td>Sajee</td>
                <td>26</td>
            </tr>

        </table>


Hier ist der Code, den ich mit HtmlAgilityPack geschrieben habe.

 public String getFinalNodeValue(String URL)
        {
            var webGet = new HtmlWeb();
            var pageSource = webGet.Load(URL);

            var table = pageSource.DocumentNode.SelectSingleNode("//table[@id='test']//tr[1]");


            string id = null;


            IEnumerable<HtmlNode> trNodes = table.DescendantsAndSelf();

            foreach (var currentItem in trNodes)
            {
                if (currentItem == trNodes.Last())
                {
                    IEnumerable<HtmlNode> tdNodes = currentItem.Descendants();

                    foreach (var x in tdNodes)
                    {
                        if(x == tdNodes.First())
            {
                id = x.InnerText;
            }
            else
            {
                break;
            }
                    }

                }
                else
                {
                    continue;
                }
            }

            return id;

        }

Die Methode gibt keinen Wert zurück. Jede Hilfe wird sehr geschätzt.

Akzeptierte Antwort

Dies sollte es tun:

    HtmlDocument doc = new HtmlDocument();
    doc.Load(MyHtmlFile);

    HtmlNode node = doc.DocumentNode.SelectSingleNode("//table[@id='test']/tr[last()]/td");
    Console.WriteLine(node.InnerText);

Beachten Sie die Verwendung der Funktion XPATH last ()


Beliebte Antwort

Der XPath, den Sie verwenden, um die table "//table[@id='test']//tr[1]" füllen, wählt das zweite TR Element aus, nicht die Tabelle.

Dies sollte wahrscheinlich nur "//table[@id='test']" .

Um an dieser Stelle die TR Nachkommenknoten in die Variable trNodes , sollten Sie trNodes verwenden:

IEnumerable<HtmlNode> trNodes = table.SelectNodes("tr");


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum