Avatar billede compilos Nybegynder
08. september 2011 - 11:24 Der er 2 kommentarer og
1 løsning

Læse html defination fra xml og generere servercontroller

Hej
Har følgende xml:
<root>
    <div class="Class1" id="1">
        <![CDATA[<NogetData>]]>
    </div>
    <div class="Class2" id="2">
        <div class="Class22" id="3">
            <input class="Class222" id="4" type="text" maxlength="1" />
        </div>
        <div class="Class22" id="5">
          <div class="Class222" id="6">
              <input class="Class2222" id="7" type="text"  />
          </div>
          <div class="Class222" id="8">
              <input class="Class2222" id="9" type="text" />
          </div>
      </div>   
    </div>
</root>

Jeg vil gerne lave alle inputfelterne om til Servercontroller. (evt. også div)

Jeg har prøvet at lave function der løber alle noderne igennem - men når jeg add´er noderne/controllerne til min ControlHolder f..... det op.

Jeg har kigget en del på nettet men kan ikke finde noget. - Kun ved hjælp af xsl, men jeg ønsker at kunne lave det rent C#.
Og det må gerne være dynamisk da html´en kan ændre sig!

/Compilos
Avatar billede Syska Mester
08. september 2011 - 11:26 #1
Hvordan ser det ud du allerede har lavet som fucker op ... måske det kun er en lille ting som skal ændres for at det virker.

mvh
Avatar billede compilos Nybegynder
08. september 2011 - 11:53 #2
Problemet er, at når jeg adder controllerne bliver de ikke added rigtigt i hierkiet

        private void BuildWebControls(XmlNode xml)
        {
            for (int i = 0; i <= xml.ChildNodes.Count - 1; i++)
            {
                XmlNode n = xml.ChildNodes[i];

                if (n.NodeType == XmlNodeType.Text)
                {
                    Literal l = new Literal();
                    l.Text = n.Value;
                    l.ID = Guid.NewGuid().ToString();
                    (dynDiv.Controls[dynDiv.Controls.Count - 1]).Controls.Add(l);
                }

                if (n.NodeType == XmlNodeType.Element && n.Name.ToLower() == "sup")
                {
                    Literal l = new Literal();
                    l.Text = n.OuterXml;
                    l.ID = Guid.NewGuid().ToString();
                    (dynDiv.Controls[dynDiv.Controls.Count - 1]).Controls.Add(l);

                }

                if (n.NodeType == XmlNodeType.Element && n.Name.ToLower() == "span")
                {
                    Literal l = new Literal();
                    l.Text = n.OuterXml;
                    l.ID = Guid.NewGuid().ToString();
                    (dynDiv.Controls[dynDiv.Controls.Count - 1]).Controls.Add(l);

                }
                if (n.NodeType == XmlNodeType.Element && n.Name.ToLower() == "br")
                {
                    Literal l = new Literal();
                    l.Text = n.OuterXml;
                    l.ID = Guid.NewGuid().ToString();
                    (dynDiv.Controls[dynDiv.Controls.Count - 1]).Controls.Add(l);
                }


                if (n.Name.ToLower() == "input")
                {
                    TextBox box = new TextBox();
                    box.ID = dynDiv.ID + n.Attributes["id"].Value;
                    box.Attributes.Add("onKeyPress", "return disableEnterKey(event)");
                    foreach (XmlAttribute a in n.Attributes)
                    {
                        if (a.Name.ToString() != "id" && a.Name.ToString() != "name")
                        {
                            box.Attributes.Add(a.Name, a.Value);
                        }
                    }
                    dynDiv.Controls[dynDiv.Controls.Count - 1].Controls.Add(box);
                }

                if (n.NodeType == XmlNodeType.CDATA)
                {
                    Literal l = new Literal();
                    l.Text = n.Value;
                    l.ID = Guid.NewGuid().ToString();
                    (dynDiv.Controls[dynDiv.Controls.Count - 1]).Controls.Add(l);                 
                }
               
                if (n.Name.ToLower() == "div")
                {
                    HtmlGenericControl h = new HtmlGenericControl("div");

                    foreach (XmlAttribute a in n.Attributes)
                    {
                        if (a.Name == "class")
                        {
                            h.Attributes.Add("class", a.Value);
                        }
                    }
                    if (dynDiv.HasControls() )
                    {
                        (dynDiv.Controls[dynDiv.Controls.Count - 1]).Controls.Add(h);
                    }
                    else
                    {
                        dynDiv.Controls.Add(h);
                    }
                    BuildWebControls(n);
                }
            }
        }
Avatar billede compilos Nybegynder
12. september 2011 - 21:26 #3
Finder på noget andet!
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