如果可能的话,我需要编写转换与此类似生成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