Zapisování do XML   zodpovězená otázka

VB.NET

Zdravím, dělám si takovou cvičnou aplikaci, na které bych se chtěl naučit pracovat s XML.

Moje znalosti vycházají především z článku, který je zde na webu a něco málo z knihy o Visual Basicu. Ovšem narazil jsem na dva zádrhely.

1) Mám XML schéma na evidenci filmů a chtěl bych si napsat kód, který by přidal novou položku.

Mám takovéto XML schéma:

<?xml version="1.0" encoding="utf-8"?>
<pujcovna>
  <Kartoteka id="1">
    <Drama>
	<film id="1" nazev="Film1" mnozstvi="1"></film>
	<film id="2" nazev="Film2" mnozstvi="1"></film>
	<film id="3" nazev="Film3" mnozstvi="1"></film>
    </Drama>
  </Kartoteka>
</pujcovna>

Já bych chtěl přidat nový film, ovšem nevím, jak mám "namapovat" cestu. Proto se mi film vloží tam, kam nechci.

        doc.SelectNodes("pujcovna/kartoteka/drama")
        Dim xmlR As XmlNode = doc.DocumentElement
        Dim ProgramElement As XmlElement = doc.CreateElement("drama")
        ProgramElement.SetAttribute("id", "4")
        ProgramElement.SetAttribute("nazev", "film4")
        ProgramElement.SetAttribute("mnozstvi", "4")
        xmlR.InsertAfter(ProgramElement, xmlR.LastChild)
        doc.Save("data.xml")

Já bych chtěl vložit film do <drama></drama>, ale on se vloží do <pujcovna></pujcovna>.

Dále bych měl ještě otázku. Pro editaci záznamů nyní používám cyklus, kde projdu celý seznam a jakmile jde na řadu ID, které chci změnit, změním ho. Přijde mi to ale složité.

Existuje v XML nějaká obdoba klauzule WHERE? Nikde jsem se to nedočetl, tak předpokládám, že tady nic takového asi není, ale raději se zeptám :-) Předem díky za pomoc.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Používáte .NET 3.5? Pokud ano, koukněte se po XDocument. Ten lze zapisovat přímo ve stylu:

Dim a As XDocument = <?xml ... ?>
                     <doc att="val">
                         ...
                     </doc>

A přístup k prvkům pak: a.<doc>.@att, například.

K Vašemu problému:

doc.DocumentElement udává kořenový element, proto se nový záznam vloží tam, kam nemá. Napravit to můžete například tak, že najdete větev pro dramata:

doc.GetElementsByTagName("Drama")(0) a jeho podvětvím přidávat.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc, funguje to! Ještě bych se chtěl zeptat, lze nějak přidávat nové atributy k již u již vytvořených položek?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jistě:

Dim e As XmlElement = doc.GetElementsByTagName("Drama")(0)
e.Attributes.Append(doc.CreateAttribute("atribut"))
e.Attributes(e.Attributes.Count - 1).Value = "hodnota"
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback