Avatar billede kawsper Nybegynder
21. april 2009 - 11:16 Der er 9 kommentarer

XML er det her korrekt?

Hej eksperter.

Jeg sidder her og leger med min program-konfigurations parser. Formatet er i XML, og jeg bruger httpagilitypack til at læse filen.

Min testfil er sådan her:
<configuration>
  <server>
    <village name="test">
      <strategy class="Farm">
        <troop type="doll">10</troop>
        <target>Test</target>
      </strategy>
    </village>

    <village name="default">
      <strategy class="Farm">
        <troop type="teddybear">12</troop>
        <target>Test</target>
      </strategy>
    </village>
  </server>
</configuration>

Hvis jeg så ønsker at få fat på tagsne ind i village-noden med navnet "test" og strategien med klassen "Farm". Jeg bruger følgende kode:

String xml = new StreamReader("configuration.xml").ReadToEnd();
HtmlNode farmnode = xpath.getNode(xml, "//village[@name='test']//strategy[@class='Farm']");
foreach(HtmlNode child in farmnode.SelectNodes("//troop"))
{
  Console.WriteLine(child.Attributes["type"].Value);
}

Men alligevel så outputter mit program følgende output:
- doll
- teddybear

Og det er jo ikke helt det jeg vil.

Gør jeg noget forkert?
Avatar billede aaberg Nybegynder
21. april 2009 - 11:54 #1
Hvorfor bruger du ikke XmlDocument klassen som er indbygget i .NET frameworket, i stedet for et eller andet 3. parts værktøj, som tydeligvis er beregnet til html?

Jeg tror ikke du vil få dette problem, hvis du bruger xml funktionaliteten i frameworket.
Avatar billede kalp Novice
21. april 2009 - 12:50 #2
En hurtig test på http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

bekræfter, at din XPath er korrekt hvis den blev påført XML og ikke HTML.
Med andre ord skal du benytte XmlDocument som aaberg siger - kræver meget få rettelser til din kode.
Avatar billede arne_v Ekspert
21. april 2009 - 13:51 #3
Prøv:

HtmlNode farmnode = xpath.getNode(xml, "//configuration/server/village[@name='test']/strategy[@class='Farm']");

Men ellers er jeg ret enig i at bruge HtmlAgilityPack til XML svarer til at slå sig selv hårdt i hovedet med en hammer.
Avatar billede kalp Novice
21. april 2009 - 14:07 #4
måske har han allerede slået sig selv i hovedet med en hammer siden har bruger det til xml?
Avatar billede aaberg Nybegynder
28. april 2009 - 09:27 #5
kawsper -> Har du fået prøvet om det virker bedre med det indbyggede xml-rammeværk?

Koden du skrev så jo fin nok ud!
Avatar billede arne_v Ekspert
28. april 2009 - 16:04 #6
Jeg har aldrig set double slash brugt inde i xpath foer.
Avatar billede kawsper Nybegynder
05. maj 2009 - 15:18 #7
Hej alle,

Ja undskyld jeg er så længe om at svare. Jeg har siddet og slået mig selv i hovedet med en hammer. HtmlAgilityPack bruger vist næsten samme API som XmlDocument, så det var en meget nem omskrivning.

Og nu virker det bare! Tak Kalp. Opretter du svar?

Hilsen Kasper
Avatar billede kawsper Nybegynder
05. maj 2009 - 15:21 #8
arne_v:
Angående double slash så bruges det vistnok til at selecte flere elementer.
Avatar billede arne_v Ekspert
11. maj 2009 - 03:58 #9
// først i XPath betyder at search starter i current node

// midt i XPath har jeg aldrigs et før, men en hurtig googling viser at det betyder at der kan være elementer imellem
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