Avatar billede ttgeek Nybegynder
21. marts 2006 - 19:06 Der er 5 kommentarer og
1 løsning

XPath søgning i xhtml?

Hej kloge mennesker.

Jeg sider her med et xhtml doc, .net 1.1 og er led og ked af xpath. Jeg har brug for alle input-felter i formen. Den søgning jeg laver med xpath giver 0 resultater.
Nogen der kan sige hvad jeg gør forkert?

public void FillApplicationForm(ref string form)
{
System.Xml.XmlDocument emptyForm = new XmlDocument();
emptyForm.LoadXml(form);

//gets the input nodes of the xml form
XmlNodeList emptyNodes = emptyForm.SelectNodes("//input");
.......
}

og her er indholdet af 'form':
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"[]><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title></title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" /></head><body><form id=\"form1\" method=\"post\"><hr /><table border=\"0\" cellspacing=\"5\" cellpadding=\"3\"><tr><td width=\"15%\">Navn*</td><td width=\"25%\"><input type=\"text\" name=\"Navn\" /></td><td width=\"15%\">Cpr.nr.</td><td width=\"25%\"><input type=\"text\" name=\"Cpr.nr.\" /></td></tr><tr><td width=\"15%\">Adresse*</td><td width=\"25%\"><input type=\"text\" name=\"Adresse\" /></td><td width=\"15%\">Tlf. primr*</td><td width=\"25%\"><input type=\"text\" name=\"Tlf.primr\" /></td></tr><tr><td width=\"15%\">Postnr.*</td><td width=\"25%\"><input type=\"text\" name=\"Postnr.\" /></td><td width=\"15%\">Tlf. alternativ </td><td width=\"25%\"><input type=\"text\" name=\"Tlf.alternativ\" /></td></tr><tr><td width=\"15%\">By*</td><td width=\"25%\"><input type=\"text\" name=\"By\" /></td><td width=\"15%\">Tlf. arbejde </td><td width=\"25%\"><input type=\"text\" name=\"Tlf.arbejde\" /></td></tr><tr><td width=\"15%\">Land*</td><td width=\"25%\"></td><td width=\"15%\">E-mail</td><td width=\"25%\"><input type=\"text\" name=\"E-mail\" /></td></tr></table><hr /></form></body></html>"


På forhånd tak :)
Avatar billede arne_v Ekspert
21. marts 2006 - 23:54 #1
XmlNodeList emptyNodes = emptyForm.GetElementsByTagName("input");
Avatar billede ttgeek Nybegynder
22. marts 2006 - 15:42 #2
Arne, du er min evige redningsmand. post et svar og jeg vil berige dig med alle 30 point.

Kan det være rigtigt at xpath sutter numse i .net 1.1?
Avatar billede arne_v Ekspert
22. marts 2006 - 18:46 #3
kommer her
Avatar billede arne_v Ekspert
22. marts 2006 - 18:51 #4
jeg tror faktisk godt at du kan lave det med XPath - du skal nok bare ikke starte
med //

men GetElementsByTagName laa lige for
Avatar billede ttgeek Nybegynder
23. marts 2006 - 18:05 #5
Arne: ja, det burde kunne laves med xpath. // er forkortelse for alle decendents eller aktuel node, så den burde virke. har prøvet at undlade // men det hjalp ikke.. Jeg tror det har noget med namespaces at gøre, har set andre have lignene problemer hvor namespaces var løsningen. Hvis jeg fjerner "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"[]>" fra starten af dokumentet, så virker xpath søgningen. men det kan jeg bare ikke bruge til noget. kan ikke få namespaces til at spille.
Avatar billede arne_v Ekspert
24. marts 2006 - 02:44 #6
Jeg er ikke så skrap til XPath syntax.

Og namespaces er noget fanden har opfundet.

Men jeg kan få det til at virke for XPath med DOCTYPE og namespace !

Efter lidt studeren af docs kom jeg op med følgende:

using System;
using System.Xml;

namespace E
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            string s1 = "<html><head><title></title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" /></head><body><form id=\"form1\" method=\"post\"><hr /><table border=\"0\" cellspacing=\"5\" cellpadding=\"3\"><tr><td width=\"15%\">Navn*</td><td width=\"25%\"><input type=\"text\" name=\"Navn\" /></td><td width=\"15%\">Cpr.nr.</td><td width=\"25%\"><input type=\"text\" name=\"Cpr.nr.\" /></td></tr><tr><td width=\"15%\">Adresse*</td><td width=\"25%\"><input type=\"text\" name=\"Adresse\" /></td><td width=\"15%\">Tlf. primr*</td><td width=\"25%\"><input type=\"text\" name=\"Tlf.primr\" /></td></tr><tr><td width=\"15%\">Postnr.*</td><td width=\"25%\"><input type=\"text\" name=\"Postnr.\" /></td><td width=\"15%\">Tlf. alternativ </td><td width=\"25%\"><input type=\"text\" name=\"Tlf.alternativ\" /></td></tr><tr><td width=\"15%\">By*</td><td width=\"25%\"><input type=\"text\" name=\"By\" /></td><td width=\"15%\">Tlf. arbejde </td><td width=\"25%\"><input type=\"text\" name=\"Tlf.arbejde\" /></td></tr><tr><td width=\"15%\">Land*</td><td width=\"25%\"></td><td width=\"15%\">E-mail</td><td width=\"25%\"><input type=\"text\" name=\"E-mail\" /></td></tr></table><hr /></form></body></html>";
            XmlDocument docx = new XmlDocument();
            docx.LoadXml(s1);
            XmlNodeList xnlx = docx.SelectNodes("//input");
            Console.WriteLine(xnlx.Count);
            string s2 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"[]><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title></title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" /></head><body><form id=\"form1\" method=\"post\"><hr /><table border=\"0\" cellspacing=\"5\" cellpadding=\"3\"><tr><td width=\"15%\">Navn*</td><td width=\"25%\"><input type=\"text\" name=\"Navn\" /></td><td width=\"15%\">Cpr.nr.</td><td width=\"25%\"><input type=\"text\" name=\"Cpr.nr.\" /></td></tr><tr><td width=\"15%\">Adresse*</td><td width=\"25%\"><input type=\"text\" name=\"Adresse\" /></td><td width=\"15%\">Tlf. primr*</td><td width=\"25%\"><input type=\"text\" name=\"Tlf.primr\" /></td></tr><tr><td width=\"15%\">Postnr.*</td><td width=\"25%\"><input type=\"text\" name=\"Postnr.\" /></td><td width=\"15%\">Tlf. alternativ </td><td width=\"25%\"><input type=\"text\" name=\"Tlf.alternativ\" /></td></tr><tr><td width=\"15%\">By*</td><td width=\"25%\"><input type=\"text\" name=\"By\" /></td><td width=\"15%\">Tlf. arbejde </td><td width=\"25%\"><input type=\"text\" name=\"Tlf.arbejde\" /></td></tr><tr><td width=\"15%\">Land*</td><td width=\"25%\"></td><td width=\"15%\">E-mail</td><td width=\"25%\"><input type=\"text\" name=\"E-mail\" /></td></tr></table><hr /></form></body></html>";
            XmlDocument docy = new XmlDocument();
            docy.LoadXml(s2);
            XmlNodeList xnly = docy.SelectNodes("//input");
            Console.WriteLine(xnly.Count);
            XmlDocument docz = new XmlDocument();
            docz.LoadXml(s2);
            XmlNamespaceManager xnm = new XmlNamespaceManager(docz.NameTable);
            xnm.AddNamespace("html", "http://www.w3.org/1999/xhtml");
            XmlNodeList xnlz = docz.SelectNodes("//html:input", xnm);
            Console.WriteLine(xnlz.Count);
        }
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester