0

vbでxmlファイルを編集しようとした後、2つの質問が表示されました。答えを見つけようとしましたが、期待どおりに機能しませんでした。達成しようとしているのは、負の値を持つtransport_ordersの場合は負の値を置き換えることです。値は小数点以下2桁の数値であり、正の値は同じ形式のままであることに注意してください。

ソース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桁の数値であり、代わりに324が得られるため、何かが足りないと思います。

    element.Element( "amounts")。Element( "amount")。Element( "value")。decimal( "n2")= -element.Element( "amounts")。Element( "amount")。Element( " value ")。Value

  2. 2012-04-20T18:26:43から日付のみ、またはhorsのみを置き換えるにはどうすればよいですか?たとえば、ピックアップタスクの時間ウィンドウ-from_instant日付を配達のタスク時間ウィンドウの日付で編集したい-まで瞬時ですが、時間(時、分、秒)はそのままにしておきます。

ありがとう。

4

1 に答える 1

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()
于 2012-04-22T17:22:54.900 に答える