ORIGINAL - 这是我原来的XML:
<course acad_year="2012" cat_num="85749" offered="N" next_year_offered="2013">
<term term_pattern_code="4" fall_term="Y" spring_term="Y">full year</term>
<department code="VES">
<dept_long_name>Department of Visual and Environmental Studies</dept_long_name>
<dept_short_name>Visual and Environmental Studies</dept_short_name>
</department>
</course>
渴望结果 - 我正在尝试创建另一个较短版本的原始XML,它将分组并列出所有部门代码,如下例所示:
<departments>
<department code="some_code" name="some_name"/>
<department code="some_code" name="some_name"/>
<department code="some_code" name="some_name"/>
</departments>
这就是我正在尝试而不工作的地方:
<xsl:template match="/">
<departments>
<xsl:for-each-group select="fas_courses/course" group-by="department[@code]">
<xsl:text disable-output-escaping="yes"> <department code=" </xsl:text>
<xsl:value-of select="department/@code"/>
<xsl:text>" name="</xsl:text>
<xsl:value-of select="dept_short_name"/>
<xsl:text disable-output-escaping="yes">"><department/></xsl:text>
</xsl:for-each-group>
</departments>
</xsl:template>
我得到的错误 F [Saxon-PE 9.4.0.3]与元素类型“department”关联的属性“code”的值不得包含'&lt;'字符。
从错误消息中,我理解'&lt;'字符在xsl:text元素中给我一个错误,但是我怎么把那个字符放在那里?,我已经在使用disable-output-escaping =“yes”,还有什么吗? 谢谢!
答案 0 :(得分:2)
使用disable-output-escaping绝不是一个好主意,你真的不需要它。试试这个:
<xsl:template match="/">
<departments>
<xsl:for-each-group select="fas_courses/course" group-by="department/@code">
<department code="{department/@code}" name="{department/dept_short_name}" />
</xsl:for-each-group>
</departments>
</xsl:template>
答案 1 :(得分:0)
您需要在&lt; [DATA [...]]&gt;内写下您的文字。所以它不会被解析或使用&lt;和&gt;对于您输出的标签。