我需要从数据库VB NET编辑和更新XML文件

时间:2017-07-10 15:03:23

标签: xml vb.net xpath

我有一个包含大量XML文件作为字符串的数据库,我想更新这些文件但仅限于某些条件,例如我有这个文件:

<Activity mc:Ignorable="sads sap" x:Class="EmptyTask"
 xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
 xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 ...
                  <t1:ReadProductParameterValue DisplayName="Normes tares" sap:VirtualizedContainerService.HintSize="200,22" Parameter="Normes tares" Value="[NormeTare]">
                    <sap:WorkflowViewStateService.ViewState>
                      <scg:Dictionary x:TypeArguments="x:String, x:Object">
                        <x:Boolean x:Key="IsExpanded">True</x:Boolean>
                      </scg:Dictionary>
                    </sap:WorkflowViewStateService.ViewState>
                  </t1:ReadProductParameterValue>
                  ...
                      <t1:ReadProductParameterValue DisplayName="Normes volumes" sap:VirtualizedContainerService.HintSize="200,22" Parameter="Normes volumes" Value="[NormeVol]">
                        <sap:WorkflowViewStateService.ViewState>
                          <scg:Dictionary x:TypeArguments="x:String, x:Object">
                            <x:Boolean x:Key="IsExpanded">True</x:Boolean>
                          </scg:Dictionary>
                        </sap:WorkflowViewStateService.ViewState>
                      </t1:ReadProductParameterValue>
                      ...
     sap:VirtualizedContainerService.HintSize="200,22" Increment="1" Variable="OccurencePesee">

                                                                          <sap:WorkflowViewStateService.ViewState>
                                                                            <scg:Dictionary x:TypeArguments="x:String, x:Object">
                                                                              <x:Boolean x:Key="IsExpanded">True</x:Boolean>
                                                                            </scg:Dictionary>
                                                                          </sap:WorkflowViewStateService.ViewState>
                                                                        </t1:IncrementSharedVariableValue>
...
...
...                                                                                                                      <t1:WriteSharedVariableValue BatchVariableName="{x:Null}" DisplayName="rec_tare_ou_vol_hors_norme" sap:VirtualizedContainerService.HintSize="200,22" Value="[local_tare_ou_vol_hors_norme]" Variable="rec_tare_ou_vol_hors_norme">
                                                                                                                        <sap:WorkflowViewStateService.ViewState>
                                                                                                                          <scg:Dictionary x:TypeArguments="x:String, x:Object">
                                                                                                                            <x:Boolean x:Key="IsExpanded">True</x:Boolean>
                                                                                                                          </scg:Dictionary>
                                                                                                                        </sap:WorkflowViewStateService.ViewState>
                                                                                                                      </t1:WriteSharedVariableValue>
                                                                                                                      <FlowStep.Next>
...
...
...                                                                                                                          <t1:ExecuteTask BackColor="{x:Null}" DateToExecute="{x:Null}" LowLevel="{x:Null}" UpLevel="{x:Null}" BypassVariable="{x:Null}" AutoStart="True" DisplayName="A118. Stand by BP (v.1)" Grouping="" sap:VirtualizedContainerService.HintSize="250,55" Label="Stand by BP (v.1)" Tache="8529de33-9721-4449-83d4-79b7fd5590f0" LockingTask="True" TypePoste="Remplissage">
                                                                                                                            <t1:ExecuteTask.Arguments>
                                                                                                                              ...
  </Flowchart>
</Activity>

这里我想修改这个确切的节点

<t1:ExecuteTask BackColor="{x:Null}" DateToExecute="{x:Null}" LowLevel="{x:Null}" UpLevel="{x:Null}" BypassVariable="{x:Null}" AutoStart="True" DisplayName="A118. Stand by BP (v.1)" Grouping="" sap:VirtualizedContainerService.HintSize="250,55" Label="Stand by BP (v.1)" Tache="8529de33-9721-4449-83d4-79b7fd5590f0" LockingTask="True" TypePoste="Remplissage">
                                                                                                                                <t1:ExecuteTask.Arguments>

“ExecuteTask”并将“ExTasks”和“Tache”替换为“TaskID”并将其重新保存到我的DB 我怎么能用VB.NET来做..? 我是通过使用一些sql命令来做到的,但有时候,它会替换我不想修改的名称,所以我必须具体,并指定我想要编辑和更新的节点。

1 个答案:

答案 0 :(得分:0)

使用xml linq非常简单:

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 executeTask As XElement = doc.Descendants().Where(Function(x) x.Name.LocalName = "ExecuteTask").FirstOrDefault()
        executeTask.SetAttributeValue("BackColor", "purple")
    End Sub

End Module