2015-04-16 2 views
0

Я пытаюсь оценить уравнение, вставленное как значение тега xml, используя Xquery, Xpath или Xproc - простым словом в чистом XML. Я новичок здесь, но, на мой взгляд, это должно быть выполнимо. Чтобы лучше продемонстрировать, что я хочу достичь, см этот пример:Оценить значение xml как уравнение

<inp> 
<data> 
    <a>5</a> 
    <b>4</b> 
</data> 
<eq> 
    a+b 
</eq> 
</inp> 

Теперь будет какая-то магия ... и как результат я хотел бы получить что-то вроде:

<res> 
    9 
</res> 

Могли вы помогаете мне с магией? По крайней мере, укажите, как это сделать, для исправления технологий - xquery, xpath или xproc. Благодарю. Todor

EDIT: Чтобы избежать обвинений в том, что я не занимался исследованиями - это часть вопроса. Я пытаюсь определить лучшие технологии из семейства xml для использования. Вот почему я прошу направление решения не для решений :). Благодарю. PS> Конечно, я был бы признателен за решения, но я не хочу использовать больше вашего времени, чем необходимо.

+0

Зачем нужен результат '5'? –

+0

Ах, извините, моя ошибка. Это должно было быть 9. – todor

+0

Попробуйте дать XSLT взгляд. Не уверен, что это оптимально, но я уверен, что он может решить проблему. – Andersnk

ответ

1

Если вы можете изменить синтаксис для XPath-совместимым, так что $a+$b, а не a+b, то это легко сделать с помощью XSLT 3.0 в XSL: оценить или Eval() расширения, предлагаемые таким образом, конкретный процессор по различные процессоры XSLT 1.0 и 2.0. Решение 3.0 будет выглядеть следующим образом:

<xsl:template match="inp" 
    <xsl:evaluate xpath="eq" 
     with-params="map:merge(
      for $p in data/* return map{node-name($p): data($p)})"/> 
</xsl:template> 

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

+0

Майкл: Спасибо. Это похоже на то, что мне нужно. Сам формат полностью полностью под моим контролем, поэтому я советую вам. Я попробую за выходные :) – todor

+0

Я пробовал код, но я не могу заставить его работать. Я понимаю, чего вы хотите достичь, но когда я разбираю его с помощью xalan, я получаю ошибку - отсутствует переменная $ p. Я также переработал тег оценки так, как мне кажется, он должен выглядеть, но он все еще не работает. Не могли бы вы помочь мне закончить его? – todor

+0

todor