Avatar billede mickni33 Nybegynder
11. november 2010 - 12:35 Der er 2 kommentarer og
1 løsning

fjerne elementer fra xml

Jeg har et xmldokument:

<?xml version="1.0" encoding="UTF-8" ?>
<EnticeResponse>
<data>
<row>
  <SUBSCRIBER_ID>6677</SUBSCRIBER_ID>
  <ACCT_ID>25</ACCT_ID>
  <CUST_ID>333</CUST_ID>
  <BALANCE>0</BALANCE>
  <BALANCE_REF>0</BALANCE_REF>
  <STATUS>12</STATUS>

osv osv osv

dette er hvad jeg gør:

string XmlString = webservice.getXML();
xmldoc = LoadXml(XmlString);

Hvordan fjerner jeg nemmest de 3 første elementer så xmlDoc eller XmlString kun indeholder xml fra :
<SUBSCRIBER_ID>6677</SUBSCRIBER_ID>
Avatar billede mickni33 Nybegynder
11. november 2010 - 14:28 #1
XmlNodeList nodes = _xmldoc.SelectNodes(@"/EnticeResponse/data");
                string s = nodes[0].InnerXml;
                xmlAsString = s.Replace("row", "xmlSubscriber");

_xmldoc.LoadXml(xmlAsString);

så har jeg et nyt xml
Avatar billede arne_v Ekspert
11. november 2010 - 17:33 #2
Jeg ville nok prøve med noget ImportNode fremfor XmlDocument->String->XmlDocument.

Demo:

using System;
using System.Xml;

namespace E31
{
    class Program
    {
        public static void Main(string[] args)
        {
            string xml = @"<?xml version='1.0' encoding='UTF-8' ?>
<EnticeResponse>
<data>
<row>
  <SUBSCRIBER_ID>6677</SUBSCRIBER_ID>
  <ACCT_ID>25</ACCT_ID>
  <CUST_ID>333</CUST_ID>
  <BALANCE>0</BALANCE>
  <BALANCE_REF>0</BALANCE_REF>
  <STATUS>12</STATUS>
</row>
</data>
</EnticeResponse>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            Console.WriteLine(doc.OuterXml);
            XmlDocument doc1 = new XmlDocument();
            doc1.LoadXml(doc.SelectNodes(@"/EnticeResponse/data")[0].InnerXml.Replace("row", "xmlSubscriber"));
            Console.WriteLine(doc1.OuterXml);
            XmlDocument doc2 = new XmlDocument();
            doc2.AppendChild(doc2.CreateElement("xmlSubscriber"));
            foreach(XmlNode n in doc.SelectNodes(@"/EnticeResponse/data/row/*")) doc2.DocumentElement.AppendChild(doc2.ImportNode(n, true));
            Console.WriteLine(doc2.OuterXml);
            Console.ReadKey();
        }
    }
}
Avatar billede janus_007 Nybegynder
11. november 2010 - 20:08 #3
Jeg ville bruge XDocument, istedet for XmlDocument.

Så gør du sådan her:

var result = xDoc.Root.Element("data").Element("row").Elements();

Nu er det jo lidt svært lige at vide hvad du herefter skal, men ovenstående giver dig præcis childs i elementet "row" :)
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