Zmiana kilku wartości w pliku XML

0

Witam.

Mam przykładowy plik XML:

<?xml version="1.0" encoding="utf-8"?>
<ustawienia>
	<okno>
  		<wymiary>
    			<H>150</H>
    			<W>250</W>
 		</wymiary>
	</okno>
</ustawienia>

Chciałbym zmienić wartość okno/wymiary/H.
Z tego co znalazłem w sieci mogę to zrobić tak:

XmlTextWriter writer = new XmlTextWriter("product.xml", System.Text.Encoding.UTF8);
writer.WriteStartDocument(true);
writer.Formatting = Formatting.Indented;
writer.Indentation = 2;
writer.WriteStartElement("ustawienia");
writer.WriteStartElement("okno");
writer.WriteStartElement("wymiary");
writer.WriteStartElement("H");
writer.WriteString("300");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();

Jednak wydaje mi się że to paskudnie wygląda i jest nie wygodne stąd pytanie, czy jest jakaś metoda aby zapisać to jakoś tak :

element = OpenNode("ustawienia/okno/wymiary/H");
element.WriteString("300");
element.Close();

Chodzi mi o to żeby nie otwierać kolejnych gałęzi po kolei tylko zrobić to w jednocześnie.

dodanie znacznika <code class="csharp"> - @furious programming

1

Nie będę przepisywał więc masz linki:

Warto na początku wpisać problem w Google.

0

Ok to się udało, walczę teraz ze stworzeniem całej gałęzi...
Np jak sprawdzić czy w pliku jest gałąź okno/wymiary/H a jeżeli jej nie ma to ją stworzyć?

0
var element = doc.Element("Foobar");
if(element != null)
{
  //element istnieje możemy na nim pracować
}
else
{
 //element nie istnieje - należy go stworzyć
} 
0

@Trebuh dzięki, ale to udało mi się napisać.
Mam problem z częścią gdy element nie istnieje.

Znalazłem coś takiego :

XmlDocument doc = new XmlDocument();        
XmlNode newElem = doc.CreateNode("element", "TEST", "");  
newElem.InnerText = "TAK";
XmlElement root = doc.DocumentElement;
root.AppendChild(newElem);
doc .Save(fileName);

ale element TEST nie jest tworzony....

0
            XmlDocument doc = new XmlDocument();
            XmlNode newElem = doc.CreateNode("element", "TEST", "some");
            newElem.InnerText = "foo";
            doc.AppendChild(newElem);
            doc.Save(@"C:/xml_test.xml");

Tak powinno działać ;)

0

Coś zaczyna działać :).

A czy da się jakoś utworzyć całą gałąź ?

Bo coś takiego doc.CreateNode("element", "BOOK/TITLE", ""); powoduje wyjątek `Znak '/' o wartości szesnastkowej 0x2F nie może wchodzić w skład nazwy.'.
A chciałbym żeby w pliku utworzyło się coś takiego :

<BOOK>
	<TITLE></TITLE>
</BOOK>

Stworzyłem sobie coś takiego :

    private void WriteNode(string FileName, string galaz, string wartosc)
        {           
            XmlDocument XML = new XmlDocument();
            XmlElement xmlElementMain = null;
            XML.Load(FileName);
            XmlNode Node = null;
            xmlElementMain = XML.DocumentElement;       

            string _galaz = galaz;
            string[] Elementy = _galaz.Split('/');
            XmlElement ParrentElement = null;
            ParrentElement = xmlElementMain;
            if (xmlElementMain != null)
            {
                for (int i = 0; i < Elementy.Length; i++)
                {

                    Node = ParrentElement.SelectSingleNode(Elementy[i]);
                    if (Node == null)
                    {
                        XmlElement xmlElement1lvl = XML.CreateElement(Elementy[i]);
                        ParrentElement.AppendChild(xmlElement1lvl);
                        ParrentElement = xmlElement1lvl;
                    }
                    else
                    {
                        ParrentElement = (XmlElement)Node;
                    }
                }
             
                XmlText value = XML.CreateTextNode(wartosc);
                ParrentElement.RemoveAll();
                ParrentElement.AppendChild(value);
            }
            XML.Save(FileName);
        }

Wygląda na to, że działa ;)

0

Tutaj masz klika przykładów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1