试图在这里找到一些作业,在线老师从未回答过我提出的任何问题。 尝试处理xml文档时,我总是收到错误消息。 “ XTTE0570:所需变量$ depts的基数恰好为1;提供的值的基数不止一个”
案例问题说明:
首先,创建一个名为getemployees的模板。
在getEmployees模板中,创建一个名为depts的变量,其中包含以下文本字符串的序列,这些字符串表示Lucy的示例数据的部门代码:'a00','c01','d11','d21',' e11”和“ e21”。
在创建depts变量的行之后,创建department元素。
在department元素内,插入一个for-each循环,该循环遍历 序列。
对于depts序列中的每个条目,请执行以下操作:
a。创建一个名为currentDept的变量,该变量等于depts序列中的当前项目。
b。使用名为deptiD的属性创建一个名为department的元素,该属性的值等于currentDept变量的值。
c。使用doc()函数引用“ deptcurrent.xml”文件,其中current是currentDept变量的值。 (提示:使用concat()函数将“ dept”的文本字符串,currentDept变量和文本字符串“ .xml”组合在一起。)
d。使用copy-of元素将employees元素及其后代的内容复制到department元素。将更改保存到文件中,然后使用XSLT 2.0处理器生成结果 通过在alldepartments.xsl中应用getEmployees模板来文档horizons.xml 样式表。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template name="getEmployees">
<xsl:variable name="depts" select="('a00', 'c01', 'd11', 'd21', 'e11', 'e21')" as="xs:string" />
<departments>
<xsl:for-each select="$depts">
<xsl:variable name="currentDept">
<xsl:value-of select="." />
</xsl:variable>
<department deptID="{$currentDept}">
<xsl:value-of select="doc(concat('dept',$currentDept, '.xml'))" />
<xsl:copy-of select="employees" />
</department>
</xsl:for-each>
</departments>
</xsl:template>
</xsl:stylesheet>
应生成类似于以下内容的
:<?xml version="1.0" encoding="UTF-8"?>
<departments>
<department dept="a00">
<employees>
<employee empID="10">
<firstName>Marylin</firstName>
<middleInt>A</middleInt>
<lastName>Johnson</lastName>
<department>A00</department>
<phone>3978</phone>
<email>Johnson.60@example.com/horizons</email>
<dateHired>2000-01-01</dateHired>
<title>President</title>
<edLevel>18</edLevel>
<gender>F</gender>
<birthDate>1968-08-24</birthDate>
<salary>121300</salary>
<bonus>2300</bonus>
<commission>9700</commission>
</employee>
<employee empID="40">
<firstName>Heather</firstName>
<middleInt>D</middleInt>
<lastName>Gordon</lastName>
<department>A00</department>
<phone>3915</phone>
<email>Gordon.59@example.com/horizons</email>
<dateHired>2009-03-01</dateHired>
<title>Manager</title>
<edLevel>18</edLevel>
<gender>F</gender>
<birthDate>1986-06-03</birthDate>
<salary>85400</salary>
<bonus>1700</bonus>
<commission>6500</commission>
</employee>
</employees>
</department>
</departments>
答案 0 :(得分:0)
如果您在as
上使用xsl:variable
属性来声明变量的类型,则您选择的值需要适合该声明,因此,假设您有一系列字符串,则需要使用<xsl:variable name="depts" select="('a00', 'c01', 'd11', 'd21', 'e11', 'e21')" as="xs:string*" />
。
另外
<xsl:copy-of select="employees" />
在for-each
内的字符串序列内没有任何意义(并解释了在纠正变量类型后出现的错误),在那里,您只是想要
<xsl:copy-of select="doc(concat('dept', ., '.xml'))/employees" />