Avatar billede tommer Nybegynder
24. marts 2011 - 15:53 Der er 4 kommentarer og
1 løsning

søge i xml

jeg søger i noget xml med brugere:
eksempel xml:
<users>
    <user>
        <id>1</id>
        <email>xx@xx.com</email>
    </user>
</users>

jeg har brug for at finde alle <user> noder hvor email indeholder en bestemt værdi.
IEnumerable<XElement> elements = xDoc.Descendants("user").Where(n => n.Element("email").Value.Contains("xx@"));

StringBuilder strXml = new StringBuilder();
  strXml.Append("<users>");
foreach (XNode node in elements.Nodes())
        {
            strXml.Append(node.ToString());
        }
strXml.Append("</users>");

men det giver mig en liste af noderne i den enkelte <user>

jeg vil gerne ende ud med hele <user> noden incl dens Descendants..

hvordan kan jeg gøre det?
Avatar billede arne_v Ekspert
24. marts 2011 - 16:27 #1
proev:

IEnumerable<XElement> elements = xDoc.Root.Element("user").Where(n => n.Element("email").Value.Contains("xx@"));
Avatar billede tommer Nybegynder
24. marts 2011 - 16:46 #2
Hej Arne,
det giver umiddelbart samme resultat...
Avatar billede tommer Nybegynder
24. marts 2011 - 17:07 #3
Jeg har fikset det med:
foreach (XElement b in elements)
        {
            strXml.Append("<user>");
            foreach (XNode node in b.DescendantNodes())
            {
                strXml.Append(node.ToString());
            }
            strXml.Append("</user>");
        }

send bare et svar Arne ;-)
Avatar billede arne_v Ekspert
24. marts 2011 - 17:26 #4
To andre loesninger:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string s = @"<users>
    <user>
        <id>1</id>
        <email>xx@xx.com</email>
    </user>
    <user>
        <id>2</id>
        <email>yy@xx.com</email>
    </user>
    <user>
        <id>3</id>
        <email>xx@xx.com</email>
    </user>
</users>";
            XDocument doc = XDocument.Parse(s);
            StringBuilder res = new StringBuilder();
              res.Append("<users>" + Environment.NewLine);
              IEnumerable<XElement> elements = doc.Root.Elements("user").Where(n => n.Element("email").Value.Contains("xx@"));
            foreach (XNode node in elements)
            {
                res.Append(node.ToString() + Environment.NewLine);
            }
            res.Append("</users>" + Environment.NewLine);
            Console.WriteLine(res.ToString());
            Console.WriteLine("<users>" + Environment.NewLine + string.Join(Environment.NewLine, doc.Root.Elements("user").Where(n => n.Element("email").Value.Contains("xx@")).Select(n => n.ToString()).ToArray()) + Environment.NewLine);
            Console.ReadKey();
        }
    }
}
Avatar billede arne_v Ekspert
15. april 2011 - 01:46 #5
svar
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