2010-08-11 36 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中對Java的主場迎戰XXX)


如果用自制的解決方案去,模板語言當然也可以是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格式的複雜性越高,測試和維護使用它的代碼就越困難。

換句話說,單獨留下「for循環」,只是堅持基本知識。

0

您可以使用XSLT來實現這一點,但這需要一個轉換引擎。他們中的很多人(例如在大多數瀏覽器中)。如果需要,可以將變換聲明包含在給定文檔的預處理指令中。

(這取決於你用你的XML文檔的內容。)

2

XML是數據而不是指令。如果你在xml中需要一種指令,那麼創建它的數據。你可以像這樣改變你的數據結構:

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

基本上你的第二種方法。

1

您可以使用將您的XML轉換爲所需格式的XSLT。

Espesially你的榜樣<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文件是對幀的描述,第二個是對幀的描述。這些是獨立的東西,將它們混合在一起是充滿了挑戰的。