Avatar billede th1 Nybegynder
05. februar 2008 - 23:55 Der er 8 kommentarer og
2 løsninger

kun hente en gang

Hejsa eksperter

Jeg har XML som ser sådan her ud:

<zipCodes>
<zip id="8000">
    <cityID name="ID">ee26dbd0-af6b-4f1a-816c-f7409cffaf38</cityID>
    <code name="Code">8000</code>
    <name name="City">Århus</name>
</zip>
<zip name="8000">
    <cityID name="ID">3d1a5fbf-4310-43ba-ab09-dc39364b0dbd</cityID>
    <code name="Code">8000</code>
    <name name="City">Århus</name>
</zip>
</zipCodes>

Men jeg vil gerne kun selecte name, og kun 1 gang fordi den kommer 2 gange.

Er det en mulighed. Btw jeg bruger ASP.NET C#
Avatar billede arne_v Ekspert
06. februar 2008 - 00:31 #1
Du kan udvælge name udfra kriterier, f.eks.:

doc.SelectSingleNode("//zipCodes/zip[cityID.text() = 'xxxx']/name/text()")

eller bare vælge den første:

doc.SelectSingleNode("//zipVodes/zip/name/text()")

Hvis du leder efter DISTINCT så tror jeg at du bliver bødt til at vælge alle:

doc.SelecteNodea("//zipVodes/zip/name/text()")

og så lade apps håndtere det distincte.
Avatar billede th1 Nybegynder
06. februar 2008 - 01:19 #2
jamen det er lige nøjagtig mit problem.. ja hvad mener du med at "og så lade apps håndtere det distincte." ??
Avatar billede arne_v Ekspert
06. februar 2008 - 02:07 #3
noget a la:

List<string> cities = new List<string>();
XmlNodeList nl = doc.SelecteNode("//zipVodes/zip/name/text()");
string last = "-";
foreach(XmlNode n in nl)
{
  if(n.Value != last)
  {
      cities.Add(n.Value);
      last = n.Value;
  }
}
Avatar billede arne_v Ekspert
06. februar 2008 - 02:08 #4
Hvis du er på .NET 3.5 kan man muligvis lave noget smart med LINQ for XML.
Avatar billede nielle Nybegynder
06. februar 2008 - 11:06 #5
Er det dig selv som har lavet XML dokumetet, eller ligger det fast fra anden side? Er der mulighed for at ændre på formatet?
Avatar billede th1 Nybegynder
06. februar 2008 - 12:29 #6
ja det er mulighed for at ændre paa formatet da jeg selv har documentet.  men det vil jeg nu helst undgaa
Avatar billede nielle Nybegynder
06. februar 2008 - 12:53 #7
Det indeholder jo redundante data - hvilket jo egentlig er grunden til at du nu skal til at arbejde med at simplificere på output.

Desuden er der flere småting ved det nuværende format som  virker lidt problematiske:

(o) Redundante data - den samme zip kode bliver gentaget to gange.
(o) En vis inkonsisten - zip-noden har en id-attribut det ene sted og en name-attribut det andet sted.
(o) Lidt mere redundans - zip-kodens attributter gentager data som kan aflæses direkte fra dens childnodes.

Jeg ville nok hellere foretrække et format á la denne stil:

<zipCodes>
    <zip>
        <cityID name="ID">ee26dbd0-af6b-4f1a-816c-f7409cffaf38</cityID>
        <code name="Code">8000</code>
        <name name="City">Århus</name>
    </zip>
    <zip>
        Oplysninger for et helt andet postnummer
    </zip>
    <zip>
        Oplysninger for et helt tredje postnummer
    </zip>
</zipCodes>
Avatar billede nielle Nybegynder
11. februar 2008 - 18:34 #8
Er du kommet til en beslutning om formatet?
Avatar billede th1 Nybegynder
14. februar 2008 - 20:13 #9
jeps jeg beholte formatet og brugte
XPathDocument
XPathNavigator
XPathExpression
XPathNodeIterator

for at få alle mine ønsker opfyldt

Så derfor må Arne gerne ligge et svar da jeg brugte en del af hans ide
Avatar billede arne_v Ekspert
14. februar 2008 - 20:19 #10
ok
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
Kurser inden for grundlæggende programmering

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