2012-04-21 2 views
0

J'ai besoin d'éditer des fichiers XML et je voudrais créer un script pour cela. Mon expérience avec XML est presque inexistante, c'est pourquoi je demande votre aide.Remplacer le contenu au format XML

Le code XML ci-dessous contient deux ordres de transport: un qui contient un élément positif valeur et un autre qui a une valeur négative. Ce que je voudrais faire est, pour chaque commande de transport qui contient négatif valeur:

  • remplacer le 'la AddressID de la tâche de livraison ' pickup_task de AddressID s, et vice versa
  • remplacer la tâche task de la tâche de collecte (from_instant et till_instant) avec les valeurs de la tâche de livraison.

Est-il possible de créer un script VB ou un lot ou quelque chose qui pourrait remplacer ceux-ci pour un fichier de plus de 200 opérations de transport?

Merci

<?xml version="1.0" encoding="iso-8859-2"?> 
<misu version="2010"> 
    <transport_orders> 
     <transport_order> 
      <id>NOCCO/12-006798_1</id> 
      <order_number>NOCCO/12-006798_1</order_number> 
      <order_date>2012-03-30</order_date> 
      <contactId>C04396</contactId> 
      <productId>0103-01101025</productId> 
      <sum>3135.51</sum> 
      <currency_code></currency_code> 
      <reference>NOCCO/12-006798</reference> 
      <amounts> 
       <amount> 
        <unit_code>kg</unit_code> 
        <value>324.00</value> 
       </amount> 
      </amounts> 
      <pickup_task> 
       <addressid>BUCU</addressid> 
       <task_window> 
        <from_instant>2012-04-20T18:26:43</from_instant> 
        <till_instant>2012-04-20T18:26:43</till_instant> 
       </task_window> 
      </pickup_task> 
      <delivery_task> 
       <addressid>C04396_1</addressid> 
       <task_window> 
        <from_instant>2012-04-23T00:00:00</from_instant> 
        <till_instant>2012-04-24T00:00:00</till_instant> 
       </task_window> 
      </delivery_task> 
     </transport_order> 
     <transport_order> 
      <id>NOCCO/12-007016_2</id> 
      <order_number>NOCCO/12-007016_2</order_number> 
      <order_date>2012-04-02</order_date> 
      <contactId>C01137</contactId> 
      <productId>0604-08L15000</productId> 
      <sum>495.00</sum> 
      <currency_code></currency_code> 
      <reference>NOCCO/12-007016</reference> 
      <amounts> 
       <amount> 
        <unit_code>m2</unit_code> 
        <value>-5.00</value> 
       </amount> 
      </amounts> 
      <pickup_task> 
       <addressid>SFGH</addressid> 
       <task_window> 
        <from_instant>2012-04-20T18:26:43</from_instant> 
        <till_instant>2012-04-20T18:26:43</till_instant> 
       </task_window> 
      </pickup_task> 
      <delivery_task> 
       <addressid>C01137_1</addressid> 
       <task_window> 
        <from_instant>2012-04-23T00:00:00</from_instant> 
        <till_instant>2012-04-24T00:00:00</till_instant> 
       </task_window> 
      </delivery_task> 
     </transport_order> 
    </transport_orders> 
</misu> 
+0

À quelles plates-formes/langues êtes-vous ouvert ...? – McGarnagle

+0

Eh bien le plus pertinent est visuel de base, j'écris habituellement du code seulement avec l'aide d'ici et là. –

+0

Serait-ce VB.NET ou VB Script? (Powershell?) Ce serait assez simple dans .NET, mais je suppose que ce n'est pas ce que vous voulez ... – McGarnagle

Répondre

0

ici ya go ... cela devrait accomplir une partie 1. Je vais laisser la partie 2 à vous (je ne suis pas habitué à VB). Comme vous pouvez le voir, j'ai nommé le fichier XML "data.xml".

Sub Main() 
    Dim xdoc As XDocument 
    Dim filename As String 
    filename = "../../data/data.xml" 
    xdoc = XDocument.Load(filename) 
    Dim xe As XElement 
    xe = xdoc.Root.Element("transport_orders") 
    For Each element In xe.Elements("transport_order") 
     Dim val As Integer 
     val = element.Element("amounts").Element("amount").Element("value").Value 
     If (val < 0) Then 
      Console.WriteLine(val) 
      Dim puelement As XElement 
      Dim delelement As XElement 
      Dim putask As String 
      puelement = element.Element("pickup_task").Element("addressid") 
      delelement = element.Element("delivery_task").Element("addressid") 
      putask = delelement.Value 
      delelement.Value = puelement.Value 
      puelement.Value = putask 
     End If 
    Next 
    xdoc.Save(filename) 
    Console.ReadLine() 
End Sub 
+0

merci, je vais jeter un oeil, être de retour avec feed ce soir. –

0

Retour avec l'alimentation, la chose travaille gorceously, comme je l'ai dit allready ma connaissance est limitée et j'essaie toujours de comprendre ce qu'est un code ne et essayer de reproduire pour répondre à mes besoins alors voici ce que je l'ai fait pour la ma deuxième question, je sais est assez boiteuse mais il doit faire le travail, s'il vous plaît confirmer

puelement2 = element.Element("pickup_task").Element("task_window").Element("from_instant") 
delelement2 = element.Element("delivery_task").Element("task_window").Element("from_instant") 
putask2 = delelement2.Value 
delelement2.Value = puelement2.Value 
puelement2.Value = putask2 

puelement3 = element.Element("pickup_task").Element("task_window").Element("till_instant") 
delelement3 = element.Element("delivery_task").Element("task_window").Element("till_instant") 
putask3 = delelement3.Value 
delelement3.Value = puelement3.Value 
puelement3.Value = putask3 

Merci. Vraiment utile.

+1

Ce n'est pas une vraie réponse. Vous devriez mettre à jour la question si vous voulez clarifier les choses ou poser des questions sur des détails supplémentaires. Ou posez une nouvelle question. – mzjn

Questions connexes