2012-04-22 19 views
0

2つの質問はVBでxmlファイルを編集しようとした後にポップアップされました。私はtry-edで答えを見つけましたが、それらは期待どおりには機能しませんでした。負の値を持つtransport_ordersは、その正の値で負の値を置き換えます。値は2小数点以下の数値であり、正の値のシールは同じ形式のままであることを覚えておいてください。VB.netのXML編集

<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> 
... 
  1. 私は何をしようと試みてきたことは下のコードですが、値は2つの小数や結果だけで数なので、私は何かが欠けていると思う:

    ソースXMLは次のようになります私は持っている324私は得る32400

    element.Element( "金額")要素( "金額")要素( "値")10進( "n2")= - 要素。要素( "金額" ).Element( "amount")。要素( "value")。値

  2. 2012-04-20T18:26:43から、日付のみ、または馬のみをどのように置き換えることができますか?たとえば、ピリオドタスクの時間ウィンドウのfrom_instantの日付をディリバリーのタスクタイムウィンドウの日付時間は分かりますが、時間(分、分、秒)はそのままです。

ありがとう。その後

答えて

1
Dim doc = <transport_orders> 
        <transport_order> 
         (...) 
        </transport_order> 
       </transport_orders> 

    Dim culture = New CultureInfo("en") 

    Dim negativeAmmounts = (From item In doc.Descendants("value") 
          Let value = Double.Parse(item.Value, culture) 
          Where value < 0 
          Select New With { 
           .Item = item, 
           .Value = value 
          }).ToList() 

    negativeAmmounts.ForEach(Sub(e) e.Item.Value = -1 * e.Value) 

すべての値が置き換えられた場合は、文字列に文書全体を印刷することにより、例えば、チェックすることができます。

Dim outerXml = doc.ToString() 
+0

エラーラムダパラメータeは、囲んで変数を隠しますブロック、以前に定義された範囲変数、またはクエリ式の暗黙的に宣言された変数です。 XDocumentとしてdocをdocとして使用できますか?もちろんdoc = XDocument.Load(filename) –

+0

これは 'e'というメソッドパラメータがあるからです。 'ForEach'ステートメントで、' negativeAmmounts.ForEach(Sub(item)item.Item.Value = -1 * item.Value) 'のようなものに置き換えてください。 XDocumentについて - docはXDocumentオブジェクトです:)それで、XDocument.Load()を使ってそれを作成することもできます。 – MarcinJuraszek

+0

ありがとう、部分的に作業、 -324.00今が、私は小数が必要です、どうすれば小数点を維持する必要がありますか? –

関連する問題