我正在为动画设计一个简单的XML文件。我经常遇到这样的情况,我会这样写:
<frame>
<image>./image1.png<image/>
</frame>
<frame>
<image>./image2.png<image/>
</frame>
<frame>
<image>./image3.png<image/>
</frame>
...现在,这当然会变得很烦人。所以我希望XML允许这样的东西:
<frameset min=1 max=5>
<image>./image#.png<image/>
</frameset>使#成为计数器变量的占位符。我想知道的是:是否已经有标准化的方法来做这样的事情了?如果一个人使用人们已经习惯的方法,它只会让事情变得更容易。
发布于 2010-08-12 04:17:22
没有通用的模型,但您正在寻找的本质上是一种模板解决方案-一种模板语言加上一个模板求值引擎,它通过执行模板中嵌入的代码将模板转换为最终的XML。
因此,对于模型,您可以使用您熟悉的任何模板语言。
当然,最好的方法是利用现有的模板引擎解决方案(如果您有权使用该解决方案);因此您不必编写一个。例如,JSP for Java,EmbPerl for Perl,XSLT等。
以下是示例EmbPerl模板的外观:
[$ foreach my $i (1..5) $]
<frame>
<image>./image[+$i+].png<image/>
</frame>
[$ endforeach $]许多模板解决方案看起来非常相似,只是标记略有不同,逻辑语法也明显不同(Perl、Java和xxx)
如果您使用自制解决方案,那么模板语言当然可以是XML本身,例如
<frameset min=1 max=5>
<image part=1 content_type="constant">./image<image/>
<image part=2 content_type="iterator_value"><image/>
<image part=3 content_type="constant">.png<image/>
</frameset>发布于 2010-08-12 04:17:28
XML是数据,而不是指令。如果你需要xml中的一种指令,那就把它变成数据。你可以像这样改变你的数据结构:
<frameset>
<start>1</start>
<end>3</end>
<prefix>./image</prefix>
<suffix>.png</prefix>
</frameset>基本上就是你的第二种方法。
发布于 2010-08-12 04:26:00
这个想法的问题是“循环”可能意味着很多不同的东西。
在过程化语言中,循环意味着你做了某件事,然后(可能)又做了一次。过程语言已经有了一种表达“做某事”的方式。
在声明性语言中,XML更适合表达,尽管人们经常把XSLT的for-each说成是一个循环,但使用"for all all“比使用循环本身更常见。
过程性和声明性(以及其他)语言都可以用来执行您在这里讨论的那种重复任务,但是将它直接放入标记本身会混杂在一起,除非从标记所表达的意义来看,在其中声明“循环通过”或“针对每个域”是有意义的。
第一个XML文件是对框架的描述,第二个文件是对与框架有关的内容的描述。这是两个独立的东西,将它们混合在一起是令人担忧的。
https://stackoverflow.com/questions/3462418
复制相似问题