2015-07-27 3 views
0

У меня есть документ XML с содержанием следующим образом:Изменить значение файла XML с помощью математики

<CHandlingDataMgr> 
    <HandlingData> 
     <Item type="CHandlingData"> 
      <handlingName>AIRTUG</handlingName> 
      <fMass value="1400.000000" /> 
      <fSteeringLock value="30.000000" /> 
      <SubHandlingData> 
       <Item type="NULL" /> 
       <Item type="NULL" /> 
       <Item type="NULL" /> 
      </SubHandlingData> 
     </Item> 
     <Item type="CHandlingData"> 
      <handlingName>ADDER</handlingName> 
      <fMass value="1800.000000" /> 
      <fSteeringLock value="42.000000" /> 
      <SubHandlingData> 
       <Item type="CCarHandlingData"> 
        <fBackEndPopUpCarImpulseMult value="0.075000" /> 
        <fBackEndPopUpBuildingImpulseMult value="0.030000" /> 
        <fBackEndPopUpMaxDeltaSpeed value="0.250000" /> 
       </Item> 
       <Item type="NULL" /> 
       <Item type="NULL" /> 
      </SubHandlingData> 
     </Item> 
    </HandlingData> 
</<CHandlingDataMgr> 

Если бы я хотел, чтобы уменьшить значения всех тегов «fMass» на 25 процентов и уменьшить значения всех значений «fSteeringlock» на 50 процентов, как бы я это сделал? Какие инструменты следует использовать?

+1

Этот вопрос является слишком широким. Есть много и много способов сделать это. На каком языке (языках) вы планируете использовать/иметь доступ? Что вы пытались сделать? Решение, использующее только XSLT, будет отличаться от решения на Java или C# и будет отличаться, если вы собираетесь использовать Python или PHP или ... –

+0

Я ничего не пробовал, потому что ничего не знаю. Я только редактировал XML-файлы в Notepad ++ вручную. Я просто хотел бы простое решение; Мне все равно, какой инструмент или какой язык. У меня есть умеренный опыт в кодировании: пакетный, VBS, PHP, C клоны, используемые в различных видеоиграх, JavaScript. Я бы предпочел не компилировать ничего, но если это самое универсальное решение, я возьму его. –

+0

Я бы посоветовал вам немного исследовать процессоры XSLT. что предложит вам решение «без компиляции». Как только у вас будет возможность попробовать XSLT, вы можете вернуться и обновить вопрос, если у вас есть что-то более конкретное. –

ответ

0

Try C# XML Linq

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication37 
{ 
    class Program 
    { 
     const string FILENAME = @"\temp\test.xml"; 
     static void Main(string[] args) 
     { 


      XDocument doc = XDocument.Load(FILENAME); 
      List<XElement> Items = doc.Descendants("Item").ToList(); 
      XAttribute value = null; 
      foreach (XElement item in Items) 
      { 
       XElement fMass = item.Element("fMass"); 
       if (fMass != null) 
       { 
        value = item.Element("fMass").Attribute("value"); 
        fMass.Value = (0.75 * ((double)value)).ToString(); 
       } 
       XElement fSteeringLock = item.Element("fSteeringLock"); 
       if (fSteeringLock != null) 
       { 
        value = item.Element("fSteeringLock").Attribute("value"); 
        fSteeringLock.Value = (0.5 * ((double)value)).ToString(); 
       } 
      } 

      doc.Save(FILENAME); 


     } 
    } 
} 
+0

Я не имел в виду, что строки, которые я разместил, были всем содержимым XML-файла - всего лишь пример структуры. Воспроизведение всего файла в коде программы не похоже на оптимальное решение ... Однако я ценю ответ. –

+0

Я знаю. Просто использовал вход для тестирования кода. Будет работать со всем вашим файлом. Использовать XDocument doc = XDocument.Load ("filename"); – jdweng

+0

Есть ли способ реструктурировать это, чтобы он читал из файла извне, а затем либо записывал в тот же файл, либо создавал копию? Редактировать: просто увидел ваш ответ. Благодарю. –