webForumDet fria alternativet

skapa nya element/poster i xml med c#

XML

2 svar · 954 visningar · startad av Sanji

Medlem sedan juli 2009355 inlägg
Frågan#1

Hej! Jag ska skriva till en xml-fil nu för första gången, tidigare har jag endast använt xml-filer för att läsa redan existerande data så att skriva till en xml-fil är lite av ett mysterium för mig just nu.

Xml-filen ser ut så här:

<?xml version="1.0" encoding="utf-8"?>
<staticinquirytexts>
  <text>
    <companyID>a49d7f13-caa6-49a7-8dc7-5452ea7bf097</companyID>
    <SV>Statisk förfrågantext på Svenska</SV>
    <EN>Static inquirytext in English</EN>
  </text>
</staticinquirytexts>

det är denna som jag vill kunna skapa med c#:

<text>
    <companyID>a49d7f13-caa6-49a7-8dc7-5452ea7bf097</companyID>
    <SV>Statisk förfrågantext på Svenska</SV>
    <EN>Static inquirytext in English</EN>
  </text>

jag lyckas skapa nya nodes med createNode, men jag vet inte hur jag ska göra så att <companyID>, <SV> och <EN> blir childnodes till <text>...

jag har börjat skriva en klass för att hantera min xml-fil:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Common;
using System.Xml;
using System.Text.RegularExpressions;
using SmartOff_2011.Database;
using System.IO;
using System.Text;

namespace SmartOff_2011.Localization
{
    public class staticinquirytext
    {
        private string filepath;
        private HttpServerUtility _Server;

        public staticinquirytext(HttpServerUtility Server, Language lang)
        {
            this._Server = Server;
            this.filepath = _Server.MapPath("~/App_Data/Localization/staticinquirytext.xml");

        }

        public string GetInquirytext(string companyID, string lang)
        {

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filepath);
            foreach (XmlNode node in xmlDoc.LastChild.ChildNodes)
            {
                if (node.Attributes["companyID"].Value == companyID)
                {
                    return _Server.HtmlDecode(node.Attributes[lang].Value.ToString());
                }
            }
            throw new Exception("Kunde inte hitta någon text med FöretagsID: " + companyID);
        }
        public void WriteInquirytext(string companyID)
        {

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filepath);
            
            XmlNode newNode = xmlDoc.CreateNode(XmlNodeType.Element, "text", "");
            //newNode.InnerText = "";
            xmlDoc.DocumentElement.AppendChild(newNode);        
            
            newNode = xmlDoc.CreateNode(XmlNodeType.Element, "companyID", "");
            newNode.InnerText = companyID;
            
            xmlDoc.DocumentElement.AppendChild(newNode);
            newNode = xmlDoc.CreateNode(XmlNodeType.Element, "SV", "");
            xmlDoc.DocumentElement.AppendChild(newNode);
            newNode = xmlDoc.CreateNode(XmlNodeType.Element, "EN", "");
            xmlDoc.DocumentElement.AppendChild(newNode);
            newNode = xmlDoc.CreateNode(XmlNodeType.Element, "text", "");
            xmlDoc.DocumentElement.AppendChild(newNode);
    
            xmlDoc.Save(filepath);              
        }
    }
}

Så är det någon som kan vägleda mig i hur jag får önskat resultat?

Mvh Sanji

Medlem sedan juli 2009355 inlägg
#2

nu har jag löst det problemet, men nu måste jag också kunna söka igenom xml-filen för att se om det finns en ID-node med ett speciellt ID. Det sparas som inner text i noden. Så hur gör man det? Jag letade efter en contains() metod, men det fanns ingen vad jag kunde se.

Mvh Sanji

Medlem sedan mars 20007 896 inlägg
#3

XPath borde vara det lämpligaste.

string ID = "a49d7f13-caa6-49a7-8dc7-5452ea7bf097";

XPathDocument Doc = new XPathDocument("din-xml-fil.xml");
XPathNavigator navigator = Doc.CreateNavigator();
XPathNavigator node = navigator.SelectSingleNode("/path/to/text[companyID='" + ID + "']");
Console.WriteLine(node.InnerXml);

Möjligtvis.

290 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
153 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
154 ms — ändringar (db)