2010-08-11 3 views
3

Я разрабатываю простой XML-файл для анимации. Я часто получаю в ситуации, что я что-то вроде этого написать:стандарт для «циклов» в XML?

<frame> 
    <image>./image1.png<image/> 
</frame> 
<frame> 
    <image>./image2.png<image/> 
</frame> 
<frame> 
    <image>./image3.png<image/> 
</frame> 
... 

Теперь это, конечно, может раздражать. Поэтому я бы подумал, что это разрешалось:

<frameset min=1 max=5> 
    <image>./image#.png<image/> 
</frameset> 

Выполнение # заполнителя для переменной счетчика. Что мне интересно: существует ли уже стандартизованный способ сделать что-то подобное? Это просто облегчает работу, если вы используете методы, к которым люди привыкли.

Спасибо!

ответ

2

Там не существует универсальная модель, но то, что вы ищете, по существу, шаблонное решение - язык шаблона плюс двигатель оценки шаблона, преобразует шаблон в окончательный XML, выполняя код, встроенный в шаблон.

Итак, вы можете взять для модели ЛЮБОЙ язык шаблонов, с которым вы знакомы.

Самый лучший подход - это, конечно, использовать существующее решение для моделирования шаблонов, если у вас есть доступ к одному; поэтому вам не нужно писать. Например. JSP для Java, EmbPerl для Perl, XSLT и т.д. ...

Вот что шаблон образец EmbPerl будет выглядеть следующим образом:

[$ foreach my $i (1..5) $] 
<frame> 
    <image>./image[+$i+].png<image/> 
</frame> 
[$ endforeach $] 

Много шаблонных решений будет выглядеть очень похоже, с несколько иной разметки и, очевидно, другая логика синтаксис (Perl vs. Java против хого)


Если вы идете с доморощенным раствором, языком шаблонного может быть, конечно, сам по себе XML, что-то вроде

<frameset min=1 max=5> 
    <image part=1 conent_type="constant">./image<image/> 
    <image part=2 conent_type="iterator_value"><image/> 
    <image part=3 conent_type="constant">.png<image/> 
</frameset> 
0

Помните, что программа будет читать XML, а не человека. Программа должна быть проверена, и ее необходимо будет поддерживать.

Чем больше сложностей вы добавляете в формат XML, тем сложнее будет тестировать и поддерживать код, который его использует.

Другими словами, оставьте «петлю» в одиночку и просто придерживайтесь основ.

0

Вы можете использовать XSLT для достижения этого, но для этого требуется механизм преобразования. Многие из них находятся вокруг (в том числе в большинстве браузеров, например). Если нужно, вы можете включить объявление преобразования в директиву предварительной обработки данного документа.

(Это зависит от контекста, в котором вы используете ваши XML-документы.)

2

Данные XML не являются инструкциями. Если вам нужна какая-то инструкция в xml, тогда сделайте ее данными. Вы можете изменить свою структуру данных следующим образом:

<frameset> 
<start>1</start> 
<end>3</end> 
<prefix>./image</prefix> 
<suffix>.png</prefix> 

В основном ваш второй подход.

1

Вы можете использовать XSLT, который преобразует ваш XML в нужный формат.

Espesially для'S примера <frameset min=1 max=5> вы можете использовать этот XSLT пример

<xsl:template match="iframe"> 
    <xsl:variable name="from" select="./@min"/> 
    <xsl:variable name="to" select="./@max"/> 
    --> loop from the ${from} to the ${to} variable, 
</xsl:template match="iframe"> 

зацикливание в технике XSLT можно найти here

2

Проблема с этим идея состоит в том, что «петля» может означать так много разных вещей.

На процедурный язык достаточно ясно, что петля означает, что вы что-то делаете, а затем (возможно) сделаете это снова. У процедурного языка уже есть способ выразить, как выражается «что-то».

В декларативном языке, который XML немного больше подходит для выражения, более нормальным является наличие «для всех этих», чем цикл, хотя люди часто говорят о XSLT для каждого, как если бы он представляет собой цикл.

Как процедурные, так и декларативные (и другие) языки могут использоваться для выполнения повторяющихся задач, о которых вы говорите здесь, но их прямо в разметку смешивает домены беспорядочно, если только это не имеет смысла с точки зрения того, что надпись выражает объявление «цикл через» или «для каждого из них» в нем.

Ваш первый XML-файл - это описание фреймов, а второе - описание того, что делать с фреймами. Это отдельные вещи, и смешивание их вместе чревато.

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