XML - pridavani dat   otázka

VB.NET, XML

Zdravim,

uvadim kousek kodu z netu pro pridavani dat do XML.

Public Sub AddToXML()
        vlcID += 1
        ' Create our string that holds our new Person information.
        Dim cr As String = Environment.NewLine
        Dim newPerson As String = _
            "<track>" & cr & _
            "    <album>" & album & "</album>" & cr & _
            "    <location>" & Adresa & "</location>" & cr & _
            "    <id>" & vlcID & "</id>" & cr & _
            "</track>"

        ' Load the XmlDocument.
        Dim xd As New XmlDocument()
        xd.Load("_test.xml")

        ' Create a new XmlDocumentFragment for our document.
        Dim docFrag As XmlDocumentFragment = xd.CreateDocumentFragment()
        ' The Xml for this fragment is our newPerson string.
        docFrag.InnerXml = newPerson
        ' The root element of our file is found using
        ' the DocumentElement property of the XmlDocument.
        Dim root As XmlNode = xd.DocumentElement
        ' Append our new Person to the root element.
        root.AppendChild(docFrag)

        ' Save the Xml.
        xd.Save("_test.xml")
    End Sub

V XML souboru je pak ale navic "xlmns"

- <track xmlns="">
      <album>Prvni album</album> 
      <location>e:\mp3\A1</location> 
      <id>1</id> 
  </track>
- <track xmlns="">
      <album>Druhy album</album> 
      <location>e:\mp3\A2</location> 
      <id>2</id> 
  </track>

Kde se tam vzalo to xlmns a jak ho odstranim?

Diky.

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Proč plníte XML soubor tak děsným způsobem,že poskládáte string?! Na podobné operace existují v .Net již hotová řešení - např. XmlTextWriter,apod.

Vaše řešení je dle mého čistá prasárna.

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

Jsem rad, ze reagujete.

No jo, jenomze ani jedna ukazka na netu mi pak nefungovala.

XML moc neovladam a tak hledam...

Mohl bych poprosit o ukazku, pokud jiz existuje hotove reseni?

P.S: Pres writer jsem XML soubor vytvoril, ale pridani dat mi neslo.

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

Uvedu jeste podobu souboru, ktery potrebuji vytvorit presne tak, jak uklada vlc player

<?xml version="1.0" encoding="UTF-8"?>
<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">
	<title>Seznam skladeb</title>
	<trackList>
		<track>
			<album>prvni stanice</album>
			<location>http://...</location>
			<extension application="http://www.videolan.org/vlc/playlist/0">
				<vlc:id>0</vlc:id>
				<vlc:option>network-caching=1000</vlc:option>
			</extension>
		</track>
		<track>
			<album>Druha stanice</album>
			<location>http://.........</location>			
			<extension application="http://www.videolan.org/vlc/playlist/0">
				<vlc:id>1</vlc:id>
				<vlc:option>network-caching=1000</vlc:option>
			</extension>
		</track>

Povedlo se mi vytvorit zjednodusenou strukturu, protoze mi neslo pri vytvoreni soubru pridat tag <vlc:id>

- pry nelze vlozit ":"

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

Nestudujte si třídu XmlTextWriter a její submetody,není to nic složitého.

Jinak,to že se ve Vámi vytvořeném řešení doplňuje atribut "xmlns" je logické a kdybyste si alespoň trochu nastudoval třídy které používáte,tak víte proč to tak je. Je potřeba metodě předat jako druhý parametr aktuálné namespace URI,pokud se tak neudělá doplní se prázdný xmlns.

Další věcí je,že stačilo 10s na google a našel jsem cca 15 hotových řešení.,ale proč se namáhat,když to za Vás může udělat někdo cizí..že.

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

Problem je, ze ani jedno "hotove" reseni neslo aplikovat na tento priklad. Vam stacilo 10 s, ja hledam a zkousim od vcerejsiho odpoledne.

Ale kdyz nemate chut, nechte byt.

Diky za snahu.

P.S. Odzkousene a nefunkcni priklady jsem sem nekopiroval schvalne, protoze by to vypadalo jako spam.

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

Nemám chuť dělat něčí práci,mám své dost. Pokud budete mít určitý problém,tak Vám rád pomohu a určitě nejen já. Ale obecné dotazy typu "mně to nejde,prosím,o hotové řešení" mě iritují. Na práci s XML je na internetu tisíce řešení a nevěřím,že se Vám nepodařilo ani jedno funkční nalézt. I když,pokud to děláte metodou copy&paste tak se nedivím,že nejdou aplikovat.

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

"Mluvite" se mnou, aniz by jste vedel, kolik casu nad tim travim a co vsechno jsem zkousel a modifikoval.

OK, muzete tema i mou registraci zrusit, nema to tady smysl.

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

Trávíte nad tím čas od včerejšího odpoledne,jak už jste psal. Co všechno jste vyzkoušel opravdu nevím,jelikož jste to nikde nepopsal,ale o tom jsem již mluvil. Je třeba přijít s určitým problémem. Nicméně za tu chvíli jsem si napsal na rychlo vlastní aplikace,která využívá XmlTextWriter a výstupem je XML ve Vámi požadovaném formátu - aplikace mi zabrala cca 15 minut. Je lepší si věci nastudovat,než se do nich pustíte.pak děláte jen bezhlavou práci.

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

Ako už tu mnohí povedali mnohým - nikto Vám tu nebude programovať hotový program. Ukážte, čo ste vymysleli, a možno Vám tunajší ľudia pomôžu.

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

Tu máte, ako som editáciu XML riešil ja, možno je to prasáreň, ale fungovalo mi to.

REM Načítanie
Private Sub LoadInternal(ByVal doc As XDocument)
        Dim examinersUI As ListBox = My.Forms.MainForm.ExaminerView1.ExaminerList
        Dim examinersNode As XElement = doc.<Evidence>(0).<Examiners>(0)
        For Each examinerNode As XElement In examinersNode.<Examiner>
            Dim id As Integer = Int32.Parse(examinerNode.<ID>(0).Value)
            Dim fn As String = examinerNode.<FirstName>(0).Value
            Dim sn As String = examinerNode.<SurName>(0).Value
            Dim a As String = examinerNode.<Address>(0).Value
            Dim c As String = examinerNode.<City>(0).Value
            Dim z As String = examinerNode.<ZipCode>(0).Value
            Dim p As String = examinerNode.<Phone>(0).Value
            Dim examiner As New Examiner(fn, sn, a, c, z, p)
            examiner.ID = id
            examinersUI.Items.Add(examiner)
        Next
        examinersUI.Invalidate()

        Dim gradesUI As TreeNodeCollection = My.Forms.MainForm.StudentControl1.StudentView1.Nodes
        Dim gradesNode As XElement = doc.<Evidence>(0).<Grades>(0)
        For Each GradeNode As XElement In gradesNode.<Grade>
            Dim g As New GradeNode(GradeNode.<Name>(0).Value)
            Dim studsNode As XElement = GradeNode.<Students>(0)
            For Each StudNode As XElement In studsNode.<Student>
                Dim s As New StudentNode()
                s.FirstName = StudNode.<FirstName>(0).Value
                s.SurName = StudNode.<SurName>(0).Value
                s.MotherFirstName = StudNode.<MFirstName>(0).Value
                s.FatherFirstName = StudNode.<FFirstName>(0).Value
                s.Address = StudNode.<Address>(0).Value
                s.City = StudNode.<City>(0).Value
                s.ZipCode = StudNode.<ZipCode>(0).Value
                s.StudentPhone = StudNode.<SPhone>(0).Value
                s.MotherPhone = StudNode.<MPhone>(0).Value
                s.FatherPhone = StudNode.<FPhone>(0).Value
                Dim gen As Integer = Int32.Parse(StudNode.<Gender>(0).Value)
                s.Gender = IIf(gen = 0, Gender.Muž, Gender.Žena)
                s.Birth = DateTime.Parse(StudNode.<Birth>(0).Value)
                s.Integrated = Boolean.Parse(StudNode.<Integrated>(0).Value)
                Dim examsNode As XElement = StudNode.<Exams>(0)
                For Each examNode As XElement In examsNode.<Exam>
                    Dim type As ExamType = [Enum].Parse(GetType(ExamType), examNode.<Type>(0))
                    Dim ed As Date = DateTime.Parse(examNode.<ExamDate>(0).Value)
                    Dim vd As Date = DateTime.Parse(examNode.<ValidDate>(0).Value)
                    Dim eid As Integer = Int32.Parse(examNode.<Examiner>(0).Value)
                    Dim e As Examiner = Nothing
                    For Each ex As Examiner In examinersUI.Items
                        If ex.ID = eid Then
                            e = ex
                            Exit For
                        End If
                    Next
                    If e Is Nothing Then
                        Throw New FormatException("Invalid input file. Could not load examiner of exam.")
                    End If
                    Dim examExaminer As New ExamExaminer(e, type, ed, vd, s)
                    s.Exams.Add(examExaminer)
                Next
                g.Nodes.Add(s)
            Next
            gradesUI.Add(g)
        Next
    End Sub
    Public Sub Load(ByVal filename As String)
        Dim dlg As New InputBox
        dlg.Prompt = "Zadajte heslo"
        dlg.TextLabel.PasswordChar = "*"
        If dlg.ShowDialog() = DialogResult.OK Then
            My.Forms.MainForm.StudentControl1.StudentView1.Nodes.Clear()
            My.Forms.MainForm.ExaminerView1.ExaminerList.Items.Clear()
            Using fs As New FileStream(filename, FileMode.Open)
                Dim doc = Decrypt(fs, dlg.SelectedText)
                If doc IsNot Nothing Then
                    LoadInternal(doc)
                End If
            End Using
        End If
    End Sub
    Private Function Decrypt(ByVal source As Stream, ByVal password As String) As XDocument
        Try
            Dim passhash As Byte()
            Using sha As New SHA512Managed()
                passhash = sha.ComputeHash(Encoding.Default.GetBytes(password))
                Using pdb As New Rfc2898DeriveBytes(password, passhash)
                    Dim key = pdb.GetBytes(32)
                    Dim iv = pdb.GetBytes(16)
                    Using Aes As New RijndaelManaged()
                        Using crypto = Aes.CreateDecryptor(key, iv)
                            Using Stream As New CryptoStream(source, crypto, CryptoStreamMode.Read)
                                Return XDocument.Load(Stream)
                            End Using
                        End Using
                    End Using
                End Using
            End Using
        Catch ex As Exception
            MessageBox.Show("Neviem načítať súbor. Skontrolujte správnosť zadaného hesla.", My.Resources.ApplicationTitle, MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return Nothing
        End Try
    End Function
REM Ukladanie
Private Function SaveExaminer(ByVal ex As Examiner) As XElement
        Return <Examiner>
                   <ID><%= ex.ID %></ID>
                   <FirstName><%= ex.Firstname %></FirstName>
                   <SurName><%= ex.SurName %></SurName>
                   <Address><%= ex.Address %></Address>
                   <City><%= ex.City %></City>
                   <ZipCode><%= ex.ZipCode %></ZipCode>
                   <Phone><%= ex.Phone %></Phone>
               </Examiner>
    End Function
    Private Function SaveExaminers(ByVal ex As ListBox.ObjectCollection) As XElement
        Dim node = <Examiners>

                   </Examiners>
        For Each e As Examiner In ex
            node.Add(SaveExaminer(e))
        Next
        Return node
    End Function
    Private Function SaveExam(ByVal ex As ExamExaminer) As XElement
        Return <Exam>
                   <Type><%= ex.Type %></Type>
                   <ExamDate><%= ex.ExamDate.ToShortDateString() %></ExamDate>
                   <ValidDate><%= ex.ValidDate.ToShortDateString() %></ValidDate>
                   <Type><%= ex.Type %></Type>
                   <Examiner><%= ex.Examiner.ID %></Examiner>
               </Exam>
    End Function
    Private Function SaveExams(ByVal ex As List(Of ExamExaminer)) As XElement
        Dim node = <Exams>

                   </Exams>
        For Each e As ExamExaminer In ex
            node.Add(SaveExam(e))
        Next
        Return node
    End Function
    Private Function SaveStudent(ByVal ex As StudentNode) As XElement
        Dim node = <Student>
                       <FirstName><%= ex.FirstName %></FirstName>
                       <MFirstName><%= ex.MotherFirstName %></MFirstName>
                       <FFirstName><%= ex.FatherFirstName %></FFirstName>
                       <SurName><%= ex.SurName %></SurName>
                       <Address><%= ex.Address %></Address>
                       <City><%= ex.City %></City>
                       <ZipCode><%= ex.ZipCode %></ZipCode>
                       <SPhone><%= ex.StudentPhone %></SPhone>
                       <MPhone><%= ex.MotherPhone %></MPhone>
                       <FPhone><%= ex.FatherPhone %></FPhone>
                       <Gender><%= CInt(ex.Gender) %></Gender>
                       <Birth><%= ex.Birth.ToShortDateString() %></Birth>
                       <Integrated><%= ex.Integrated %></Integrated>
                   </Student>
        node.Add(SaveExams(ex.Exams))
        Return node
    End Function
    Private Function SaveStudents(ByVal ex As TreeNodeCollection) As XElement
        Dim node = <Students>

                   </Students>
        For Each e As StudentNode In ex
            node.Add(SaveStudent(e))
        Next
        Return node
    End Function
    Private Function SaveGrades(ByVal ex As TreeNodeCollection) As XElement
        Dim node = <Grades>

                   </Grades>
        For Each e As GradeNode In ex
            Dim nodeInternal = <Grade>
                                   <Name><%= e.GradeName %></Name>
                               </Grade>
            nodeInternal.Add(SaveStudents(e.Nodes))
            node.Add(nodeInternal)
        Next
        Return node
    End Function
    Private Function SaveInternal() As XDocument
        Dim doc = <?xml version="1.0"?><Evidence></Evidence>
        Dim evid = doc.Root
        evid.Add(SaveGrades(My.Forms.MainForm.StudentControl1.StudentView1.Nodes))
        evid.Add(SaveExaminers(My.Forms.MainForm.ExaminerView1.ExaminerList.Items))
        Return doc
    End Function

Je to na inom dátovom modeli, ale ako návod to snáď postačí.

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

Mohol by mi niekto vysvetliť, čo sa mu na tom nepáčilo?

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

pro neregistrovaneho:

1. XElement lze pouzivat od framework 3.5 (muj cilovy target je 2.0)

2. Je to prilis zlozite a NERESI to muj problem

3. Presto dekuji za ochotu

P.S. Na muj dotaz z lonskeho rijna nikdo neodpovedel: http://www.vbnet.cz/forum-tema--6231-sus... - nikdo neodpovedel, proto jsem to vzdal i tady. Vacsinou jsou odpovedi jizlive a typu - nastuduj si.

To sice clovek dela a snazi se, ale kazdemu neni dano.

To jenom abych nevypoadal jako nevdecnik.

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

1)nevšimol som si

2a)zložitosť je subjektívna záležitosť, pre mňa je to jednoduché, pre Vás to nemusí byť jednoduché

2b)Keby ste si to upravili, riešilo by to Váš problém

P.S.)Samozrejme, že odpoveď bude typu naštudujte si ..., to snáď nemyslíte vážne, že Vám tu budeme zadarmo robiť program. Ak chcete, aby Vám niekto spravil hotový program, napíšte, koľko ste za to ochotný zaplatiť.

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

http://msdn.microsoft.com/en-us/library/...

P.S. Je tu spousta kodu a temer hotovych funkci ci procedur, o penezich nikdo nepsal. Jestli chcete penize, dejte si inzerat. Fakt nechapu vas pristup.

nahlásit spamnahlásit spam -2 / 2 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