2012-04-11 16 views
0

Ich versuche, eine Liste der "Spalten" auf diese XML-Datei anhängen:vb.net append xml Artikel

<?xml version="1.0" encoding="UTF-8"?> 
<Conf> 
    <name List="A"> 
    <columns>1</columns> 
    <columns>2</columns> 
    <columns>3</columns> 
    <columns>4</columns> 
    <columns>5</columns> 
    <columns>6</columns> 
    </name> 
    <name List="B"> 
    <columns>1</columns> 
    <columns>2</columns> 
    <columns>3</columns> 
    <columns>4</columns> 
    <columns>5</columns> 
    <columns>6</columns> 
    <columns>9</columns> 
    </name> 
</Conf> 

Was ich habe, so weit:

Sub NewNodeInXMLFile(ByVal strPath As String, ByVal PriceList As String, ByVal columns As List(Of String)) 
     Dim XMLd As New XmlDocument 
     XMLd.Load(strPath) 
     Dim xmlEl As XmlElement = XMLd.CreateElement("name") 
     Dim xmlAttr As XmlAttribute = XMLd.CreateAttribute("List") 
     xmlAttr.Value = PriceList 
     xmlEl.Attributes.Append(xmlAttr) 

     For Each x In columns 
      xmlEl.InnerXml = "<columns></columns>" 
      xmlEl.Item("columns").InnerText = x 
'//what goes in here to append this item? 
     Next 

     XMLd.DocumentElement.AppendChild(xmlEl) 
     XMLd.Save(strPath) 
    End Sub 

Grundsätzlich, ich weiß, was auch immer in das für jedes geht, wird den Gegenstand nicht anhängen; es wird nur den letzten Wert der Liste schreiben. Gibt es eine Möglichkeit, diese Elemente anzufügen?

Dank

Antwort

1

Try this:

For Each x In columns 
    Dim newColumn = XMLd.CreateElement("columns") 
    newColumn.Value = x 
    xmlEl.AppendChild(newColumn) 
Next 
xml.GetElementsByTagName("PriceFilesConf")[0].AppendChild(xmlEl); 
0

Sie sollten die Linq XElement API verwenden. Viel einfacher zu arbeiten. Aber ersetzen sollte Ihre Schleife Code mit dem folgenden Code arbeiten:

For Each x In columns 
    Dim newElement as XmlElement = XMLd.CreateElement("columns") 
    newElement.InnerText = x 
    xmlEl.AppendChild(newElement) 
Next 

Sie werden auch ändern wollen:

XMLd.DocumentElement.AppendChild(xmlEl) zu: XMLd.AppendChild(xmlEl)