如果可能的話,我需要編寫轉換與此類似生成ID系統XSL
<media address="1234 A St.">
<book title="My Book" isbn="1324-1123-1456-1566" />
<book title="Your Book" isbn="1232-1123-1456-1566" />
</media>
的XML語法到這樣
<library>
<information>
<building id="1">
<address>1234 A St.</address>
</building>
</information>
<medialist>
<book_definitions>
<book_definition id="2" />
<book_definition id="3" />
</book_definitions>
<book_metadata>
<metadata id="4">
<isbn>1324-1123-1456-1566</isbn>
<book_definition_id>2</book_definition_id>
</metadata>
<metadata id="5">
<isbn>1232-1123-1456-1566</isbn>
<book_definition_id>3</book_definition_id>
</metadata>
</book_metadata>
<book_instances>
<book_instance id="6">
<book_definition_id>2</book_definition_id>
<book_metadata_id>4</book_metadata_id>
<title>My Book</title>
</book_instance>
<book_instance id="7">
<book_definition_id>2</book_definition_id>
<book_metadata_id>5</book_metadata_id>
<title>Your Book</title>
</book_instance>
</book_instances>
</medialist>
</library>
我實現目標格式的格式的XSL文件有點複雜,但我無法控制它。
我已成功編寫XSL以使用模板模式正確轉換大部分XML標記。即。
<xsl:template match="/media/book" mode="definitions">
<xsl:template match="/media/book" mode="metadata">
<xsl:template match="/media/book" mode="instance">
不過,我一直在嘗試使用<的xsl:數>或其他一些技巧來生成ID的正確,但收效甚微。
目標格式對id有兩個約束:每個id屬性,無管理<元素>,名稱必須是唯一的。這些ID一旦被分類,必須是順序的,但它們可以以目標格式的任何順序出現,即(1,2,3,4,5)和(5,2,3,1,4)都可以接受,但( 1,2,4,5,6)不是。
有什麼辦法可以通過XSL來實現嗎?
您確定您確實需要第二個約束嗎?將輸出節點鏈接到**不存在於輸入**中的其他輸出節點將會非常困難(並且應該正確地問你爲什麼還需要*)。 – 2015-02-24 20:14:14
不幸的是,我確實需要第二個約束。但是,假設我沒有,是否有辦法只使用XSL來滿足第一個約束? – spectacularbob 2015-02-24 20:17:33
還有一種方法可以滿足第二個約束條件。真正的問題是你願意付出多少努力。你和那些試圖幫助你的人。就我而言,我發現這項任務毫無興趣,因爲我看不出這對任何事情有什麼幫助。你的頭銜說的是主/外鍵;除了這些書已經有獨特和永久的ISBN這一事實之外,很明顯Books(你稱之爲book_definitions)是父表,所有其他表都應該鏈接到它,而不是一個級聯中的彼此。 – 2015-02-24 20:31:55