我已经在这个项目上工作了好几天。该任务要求我创建一个基于XML文件并基于DTD文件的XSL样式表。一旦我最终得到XLT文件进行验证(我希望我做的一切都正确),我试了几个小时用XML生成结果文档,但没有运气。我下载了教科书中推荐的Saxon,但即使我提取了文件等,我仍然收到错误信息。有没有更简单的方法来生成结果xml文档?我还需要确保验证。
以下是源代码:
StringLength

DTD file
<!ELEMENT customers (customer)*>
<!ELEMENT customer (order)>
<!ATTLIST customer id CDATA #IMPLIED>
<!ELEMENT order (qty, date, amount)>
<!ATTLIST order orderid CDATA #IMPLIED>
<!ELEMENT qty (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT amount (#PCDATA)>
&#13;
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-system="customers.dtd"
encoding="UTF-8"
indent="yes" />
<xsl:template match="/">
<xsl:comment>
Author: Paulina Crawford
Date: 10/10/2015
</xsl:comment>
<xsl:element name="customers">
<xsl:apply-templates
select="orders/order">
<xsl:sort select="custid" />
</xsl:apply-templates>
</xsl:element>
<xsl:apply-templates select="order" />
<xsl:element name="customer">
<xsl:attribute name="id">
<xsl:value-of select="custid" />
</xsl:attribute>
<xsl:element name="order">
<xsl:value-of select="@orderid/id" />
<xsl:value-of select="@qty" />
<xsl:value-of select="@date" />
<xsl:value-of select="@amount" />
</xsl:element>
<xsl:value-of select="custid" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
&#13;
如果有人能提供任何帮助,我将永远感激......
更新的代码:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="clist.xsl" ?>
<orders>
<order id="OR3124" qty="1" custid="CUST204">
<date>5/1/2017</date>
<amount>$108.24</amount>
</order>
<order id="OR3125" qty="2" custid="CUST117">
<date>5/1/2017</date>
<amount>$78.21</amount>
</order>
<order id="OR3126" qty="1" custid="CUST311">
<date>5/1/2017</date>
<amount>$45.93</amount>
</order>
<order id="OR3127" qty="4" custid="CUST091">
<date>5/2/2017</date>
<amount>$68.21</amount>
</order>
<order id="OR3128" qty="1" custid="CUST137">
<date>5/2/2017</date>
<amount>$117.24</amount>
</order>
<order id="OR3129" qty="1" custid="CUST128">
<date>5/3/2017</date>
<amount>$75.68</amount>
</order>
<order id="OR3130" qty="2" custid="CUST083">
<date>5/3/2017</date>
<amount>$58.93</amount>
</order>
<order id="OR3131" qty="1" custid="CUST304">
<date>5/3/2017</date>
<amount>$112.25</amount>
</order>
</orders>
&#13;
答案 0 :(得分:1)
正如我的评论中所提到的,我们无法看到你对xsl:result-document的调用如何在没有看到该代码或看到错误消息的情况下出错。以下是您向我们展示的代码中存在的一些错误:
您将(两次)引用为custid作为元素名称,但没有名为custid的元素。也许您打算使用该名称的属性,即@custid。
您引用属性@date和@amount,但这些是源中的元素,而不是属性。您还可以引用@ orderid / id,它在任何XML文档中都不存在:属性节点没有子元素。
最后,您的所有代码都在“root”模板中(使用match =“/”),但是大多数路径表达式只有在上下文项是“order”元素时才有意义。
坦率地说,我认为你是以错误的方式进行这项任务。你说你已经工作了好几天了。我怀疑你花了这么多时间试图让代码正常工作,而你应该把时间花在舒适的椅子上看书。在阅读了任何合理的XSLT教科书两天后,理想情况下做一些有用的例子,你可以在一小时内编写这个样式表。