从数据集更新XML文件

时间:2015-10-23 14:05:49

标签: xml vb.net

我正在尝试从数据集更新XML文件,XML文件将用于更新adobe illustrator中的图稿。我试图从数据集中的数据附加XML文件中的每个节点。目前,我正在循环使用数据集并使用。

正确检索数据
Dim ds As New DataSet
    ds.Tables.Add(dt)

    For Each DataRow As DataRow In ds.Tables(0).Rows     
        Dim strDatasheet As String = DataRow("Dataset").ToString
        Dim strRev As String = DataRow("Rev").ToString
        Dim strName As String = DataRow("Name").ToString
        Dim strDesc As String = DataRow("Desc").ToString
        Dim strMarketing As String = DataRow("Marketing").ToString
        Dim strProject As String = DataRow("Project").ToString

        Dim sampleDataSets As XElement = doc.Descendants().Where(Function(x) x.Name.LocalName = "sampleDataSets").FirstOrDefault()
        Dim ns_v As XNamespace = sampleDataSets.GetNamespaceOfPrefix("v")
        Dim sampleDataSet As List(Of XElement) = sampleDataSets.Elements(ns_v + "sampleDataSet").ToList()

        Dim dataset As XElement = sampleDataSet(0).Elements().Where(Function(x) x.Name.LocalName = "Dataset").FirstOrDefault()
        Dim ns_dataset As XNamespace = dataset.Name.Namespace
        dataset.Element(ns_dataset + "p").Value = strDatasheet

        Dim rev As XElement = sampleDataSet(0).Elements().Where(Function(x) x.Name.LocalName = "Rev").FirstOrDefault()
        rev.Element(ns_dataset + "p").Value = strRev

        Dim name As XElement = sampleDataSet(0).Elements().Where(Function(x) x.Name.LocalName = "Name").FirstOrDefault()
        name.Element(ns_dataset + "p").Value = strName

        Dim desc As XElement = sampleDataSet(0).Elements().Where(Function(x) x.Name.LocalName = "Desc").FirstOrDefault()
        desc.Element(ns_dataset + "p").Value = strDesc

        Dim marketing As XElement = sampleDataSet(0).Elements().Where(Function(x) x.Name.LocalName = "Marketing").FirstOrDefault()
        marketing.Element(ns_dataset + "p").Value = strMarketing

        Dim project As XElement = sampleDataSet(0).Elements().Where(Function(x) x.Name.LocalName = "Project").FirstOrDefault()
        project.Element(ns_dataset + "p").Value = strProject
    Next

但是我不确定如何更新xml文件。任何人都可以就如何附加XML文件的数据集,Rev,Name,Desc,Marketing和Project节点提供任何指导。

<?xml version="1.0" encoding="utf-8"?>
        <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN"    "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd" [
          <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
          <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
          <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
          <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
          <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
          <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
        ]>
        <svg>
        <variableSets  xmlns="ns_vars;">
          <variableSet  varSetName="binding1" locked="none">
            <variables>
              <variable varName="Dataset" trait="textcontent" category="ns_flows;"></variable>
              <variable varName="Rev" trait="textcontent" category="ns_flows;"></variable>
              <variable varName="Name" trait="textcontent" category="ns_flows;"></variable>
              <variable varName="Desc" trait="textcontent" category="ns_flows;"></variable>
              <variable varName="Marketing" trait="textcontent" category="ns_flows;"></variable>
              <variable varName="Project" trait="textcontent" category="ns_flows;"></variable>
            </variables>
            <v:sampleDataSets  xmlns:v="http://ns.adobe.com/Variables/1.0/" xmlns="http://ns.adobe.com/GenericCustomNamespace/1.0/">
              <v:sampleDataSet dataSetName="HYX8YA00">
                 <Dataset>
                    <p>YXTX1A00</p>
                 </Dataset>
                 <Rev>
                    <p>A00</p>
                 </Rev>
                <Name>
                    <p>YXTX1</p>
                </Name>
                <Desc>
                    <p>LBL,COO,KS,ESPL,E5250 15181</p>
                </Desc>
                <Marketing>
                    <p>Latitude E5250 15181</p>
                </Marketing>
                <Project>
                <p>Houston 12</p>
                </Project> 
              </v:sampleDataSet> 
            </v:sampleDataSets>
          </variableSet>
        </variableSets>
        </svg>

1 个答案:

答案 0 :(得分:1)

这对命名空间来说有点棘手。见下面的代码

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim doc As XDocument = XDocument.Load(FILENAME)
        Dim sampleDataSets As XElement = doc.Descendants().Where(Function(x) x.Name.LocalName = "sampleDataSets").FirstOrDefault()
        Dim ns_v As XNamespace = sampleDataSets.GetNamespaceOfPrefix("v")

        Dim sampleDataSet As List(Of XElement) = sampleDataSets.Elements(ns_v + "sampleDataSet").ToList()
        Dim dataset As XElement = sampleDataSet(0).Elements().Where(Function(x) x.Name.LocalName = "Dataset").FirstOrDefault()
        Dim ns_dataset As XNamespace = dataset.Name.Namespace
        dataset.Element(ns_dataset + "p").Value = 123
    End Sub

End Module​