Announcement

Collapse
No announcement yet.

Meta-Elemente in einer Webseite selektieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Meta-Elemente in einer Webseite selektieren

    Hallo,

    ich habe ein paar Probleme bei der Formulierung des XPath-Ausdrucks zur Ermittlung der meta-Elemente.

    Mein HTML-Dokument schaut so aus:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <html xml:lang="de" lang="de" xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
        <title>Fahrenheit 451</title>
        <meta name="dc:creator" content="Bradbury, Ray" scheme=""/>
        <meta name="dc:title" content="Fahrenheit 451" scheme=""/>
      </head>
      <body>
      </body>
    </html>
    In C# habe ich Folgendes gebastelt:

    Code:
    public static void Main()
    {
      XmlDocument doc = new XmlDocument();
      doc.Load(@"C:\test.html");
      XmlNode root = doc.DocumentElement;
      XmlNodeList list = root.SelectNodes("//head/meta");
      Console.WriteLine(list.Count);
    }
    Ausgegeben wird 0. Ich habe auch schon versucht, den XPath-Ausdruck umzuformulieren, aber irgendwie komme ich nicht auf die richtige Lösung.

    Vielen Dank schonmal

  • #2
    Bin kein XPath Experte. Aber falls Du noch mehr machen könntest http://htmlagilitypack.codeplex.com/ auch eine Option sein.

    Comment


    • #3
      //meta

      http://www.w3schools.com/xpath/xpath_syntax.asp
      Christian

      Comment


      • #4
        XmlDocument mag keinen unbenannten Default Namespace so wie es dein html macht. Also am besten das xmlns Attribut weglassen.
        Wenn das keine Option ist einen XmlNamespaceManager mit dem entsprechenden Mapping erzeugen und immer verwenden.

        [Highlight=C#]public static void Main()
        {
        XmlDocument doc = new XmlDocument();
        doc.Load(@"C:\test.html");

        XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
        mgr.AddNamespace("x", doc.DocumentElement.NamespaceURI);

        XmlNodeList list = doc.SelectNodes("//x:head/x:meta", mgr);

        Console.WriteLine(list.Count);
        }[/Highlight]

        Comment

        Working...
        X