2009-11-13 6 views
0

У меня есть много файлов с данными для преобразования в процентах, используя основные математические функции:Отрицательные числа в процентах

<param id="1" name="otb" value="0.160"/> 
<param id="2" name="blm" value="-0.210"/> 
<param id="3" name="mep" value="-0.010"/> 
<param id="4" name="plc" value="-0.100"/> 

Каждый идентификатор получить-х это собственное уравнение:

  1. (п - (-. 3))/2,3 * 100
  2. (п - (-. 8))/3,3 * 100
  3. (п - (-. 5))/1,5 * 100
  4. (п -. (1)) /1.1*100

Так я получаю:

ОТВ = 8 BLM = 20 MEP = 24 плс = 0

Что бы хороший способ, чтобы запустить все эти файлы с помощью регулярных выражений ... и PHP ? Какой-нибудь быстрый и грязный код? : D

+0

Я думаю, нам нужно знать, что такое «эти файлы», как предложить RegExes. – Franz

+0

Домашнее задание или реальный вызов? –

+0

Пришлось обернуть в кодовые тэги. Исправлена. –

ответ

1

Поскольку файл, как представляется, находится в формате XML, я предлагаю вам попробовать библиотеку PHP simplexml. Документация может быть найдена here.

Вы можете получить доступ к дереву XML просто посредством доступа к магическим свойствам объекта XML:

$xml = simplexml_load_file('your/path/to/your/file'); 

foreach ($xml->param as $param) 
{ 
    $id = $param['id']; 
    $name = $param['name']; 
    $value = $param['value']; 

    // do your calculations... 
} 
+0

Или простое преобразование с таблицей стилей XML. :-) –

+0

@Bravo Charly: Это работало? – Franz

+0

@Franz: Хорошо выглядит до сих пор ... все еще читает документацию. Я отнюдь не кодер, ха. –

0

стилевых магия:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output indent="yes" standalone="yes" omit-xml-declaration="yes" method="xml"/> 
    <xsl:template match="*"> 
    <xsl:copy> 
     <xsl:variable name="Values" select="@*[(name(..)='param') and ((name(.)='value'))]"/> 
     <xsl:variable name="NonValues" select="@*[. != $Values]"/> 
     <xsl:apply-templates select="$NonValues" mode="NonValues"/> 
     <xsl:apply-templates select="$Values" mode="Values"/> 
     <xsl:choose> 
     <xsl:when test="*"> 
      <xsl:apply-templates select="*"/> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="."/> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="@*" mode="Values"> 
    <xsl:attribute name="value"><xsl:variable name="n" select="."/><xsl:choose><xsl:when test="../@id=1"><xsl:value-of select="(($n - (-0.3)) div 2.3) * 100"/></xsl:when><xsl:when test="../@id=2"><xsl:value-of select="(($n - (-0.8)) div 3.3) * 100"/></xsl:when><xsl:when test="../@id=3"><xsl:value-of select="(($n - (-0.5)) div 1.5) * 100"/></xsl:when><xsl:when test="../@id=4"><xsl:value-of select="(($n - (0.1)) div 1.1) * 100"/></xsl:when><xsl:otherwise><xsl:value-of select="."/></xsl:otherwise></xsl:choose></xsl:attribute> 
    </xsl:template> 
    <xsl:template match="@*" mode="NonValues"> 
    <xsl:copy> 
     <xsl:value-of select="(.)*2"/>pp 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Если вы можете преобразовать исходный XML с этой таблицей стилей, вы получите новый XML с вычисленными результатами. Это немного сложно, но в основном код обрабатывает все элементы и дочерние элементы. Для каждого элемента он разбивает атрибуты в значениях, которые необходимо преобразовать, и другие значения. Он копирует каждый элемент, каждый дочерний элемент и каждый атрибут, за исключением атрибутов value. Атрибуты значения обрабатываются и получают другое значение. (Но вы также можете просто добавить исходное значение, если хотите его сохранить.)

Смежные вопросы