Fehler beim Hinzufügen eines Datensatzes in xml-Datei

13/03/2009 - 16:08 von Patrick Denke | Report spam
Ich nutze Linq, um Daten in einer xml-Datei unterzubringen.
Die ReplaceWith Methode funktioniert hierbei, jedoch bekomme ich bei der
Add-Methode den Fehler:
'Durch diesen Vorgang würde ein falsch strukturiertes Dokument entstehen.'

Wo liegt mein Fehler?

Folgender Code (xml-Struktur weiter unten):
Sub SaveSorte(ByVal sortedaten As ClassTypSortedaten)

If Not File.Exists(sSorteFile) Then
NeueSortendatei(sortedaten)
Exit Sub
End If

Dim xml_doc As XDocument = XDocument.Load(sSorteFile)
Dim s = From p In xml_doc.Descendants("Grades").Descendants("Grade")
Dim sortenarray = From p In s _
Where p.<Name>.Value = sortedaten.sSorte _
Select p

Dim neuesXElement As XElement
With sortedaten
neuesXElement = New XElement("Grade", _
New XElement("Name", .sSorte), _
New XElement("Density", .iDichte.ToString), _
New XElement("Polarisation1", .iInduktion(0).ToString), _
New XElement("Polarisation2", .iInduktion(1).ToString), _
New XElement("Polarisation3", .iInduktion(2).ToString), _
New XElement("P_Correction1", .iP_korrektur(0).ToString), _
New XElement("P_Correction2", .iP_korrektur(1).ToString), _
New XElement("P_Correction3", .iP_korrektur(2).ToString), _
New XElement("Field1", .iFeldstaerke(0).ToString), _
New XElement("Field2", .iFeldstaerke(1).ToString), _
New XElement("Field3", .iFeldstaerke(2).ToString), _
New XElement("B_Correction1", .iB_korrektur(0).ToString), _
New XElement("B_Correction2", .iB_korrektur(1).ToString), _
New XElement("B_Correction3", .iP_korrektur(2).ToString), _
New XElement("P_Scale", .iP_scale.ToString), _
New XElement("P_Zero", .iP_zero.ToString), _
New XElement("P_Tol", .iP_tol.ToString), _
New XElement("B_Scale", .iB_scale.ToString), _
New XElement("B_Zero", .iB_zero.ToString), _
New XElement("B_Tol", .iB_tol.ToString), _
New XElement("H_Scale", .iH_scale.ToString), _
New XElement("H_Zero", .iH_zero.ToString), _
New XElement("D_Nominal", .iD_soll.ToString), _
New XElement("D_Scale", .iD_scale.ToString), _
New XElement("D_Tol1", .iD_tol(0).ToString), _
New XElement("D_Tol2", .iD_tol(1).ToString), _
New XElement("TG_Grade", .s4Tg_Grade), _
New XElement("TensionAx", .sgTensionAx.ToString), _
New XElement("TensionB", .sgTensionB.ToString) _
)
End With

Dim anzahl = sortenarray.Count
If anzahl > 0 Then
' Ersetzen
Dim sortenliste = sortenarray.First
sortenliste.ReplaceWith(neuesXElement) ' Funktioniert!!!
Else
' Hinzufügen
xml_doc.Add(neuesXElement) ' Fehlermeldung!!!
End If
xml_doc.Save(sSorteFile)

End Sub

' xml-Struktur:
<?xml version="1.0" encoding="utf-8" ?>
<Grades>
<Grade>
<Name>3409</Name>
<Density>7700</Density>
<Polarisation1>1002</Polarisation1>
<Polarisation2>1300</Polarisation2>
<Polarisation3>1500</Polarisation3>
<P_Correction1>1000</P_Correction1>
<P_Correction2>1000</P_Correction2>
<P_Correction3>1000</P_Correction3>
<Field1>1000</Field1>
<Field2>2500</Field2>
<Field3>5000</Field3>
<B_Correction1>1000</B_Correction1>
<B_Correction2>1000</B_Correction2>
<B_Correction3>1000</B_Correction3>
<P_Scale>5000</P_Scale>
<P_Zero>2000</P_Zero>
<P_Tol>4000</P_Tol>
<B_Scale>1800</B_Scale>
<B_Zero>1000</B_Zero>
<B_Tol>1814</B_Tol>
<H_Scale>2500</H_Scale>
<H_Zero>100</H_Zero>
<D_Nominal>500</D_Nominal>
<D_Scale>50</D_Scale>
<D_Tol1>20</D_Tol1>
<D_Tol2>50</D_Tol2>
<TG_Grade>500</TG_Grade>
<TensionAx>0</TensionAx>
<TensionB>0</TensionB>
</Grade>
<Grade>
<Name>3408</Name>
<Density>7650</Density>
<Polarisation1>1002</Polarisation1>
<Polarisation2>1300</Polarisation2>
<Polarisation3>1500</Polarisation3>
<P_Correction1>1000</P_Correction1>
<P_Correction2>1000</P_Correction2>
<P_Correction3>1000</P_Correction3>
<Field1>1000</Field1>
<Field2>2500</Field2>
<Field3>5000</Field3>
<B_Correction1>1000</B_Correction1>
<B_Correction2>1000</B_Correction2>
<B_Correction3>1000</B_Correction3>
<P_Scale>5000</P_Scale>
<P_Zero>2000</P_Zero>
<P_Tol>4000</P_Tol>
<B_Scale>1800</B_Scale>
<B_Zero>1000</B_Zero>
<B_Tol>1814</B_Tol>
<H_Scale>2500</H_Scale>
<H_Zero>100</H_Zero>
<D_Nominal>500</D_Nominal>
<D_Scale>50</D_Scale>
<D_Tol1>20</D_Tol1>
<D_Tol2>50</D_Tol2>
<TG_Grade>500</TG_Grade>
<TensionAx>0</TensionAx>
<TensionB>0</TensionB>
</Grade>
</Grades>
 

Lesen sie die antworten

#1 Martin Honnen
13/03/2009 - 16:30 | Warnen spam
Patrick Denke wrote:

' Hinzufügen
xml_doc.Add(neuesXElement) ' Fehlermeldung!!!



Vermutlich willst du
xml_doc.Root.Add(neuesXElement)
so wird das neue 'Grade'-XElement am Ende des 'Grades'-Wurzelelementes
hinzugefügt.




Martin Honnen MVP XML
http://JavaScript.FAQTs.com/

Ähnliche fragen