Xml 用于引入不需要的空格的函数迭代的xsl

Xml 用于引入不需要的空格的函数迭代的xsl,xml,xslt,saxon,Xml,Xslt,Saxon,我正在使用一个基本的“超级”xml文件和一个参考xml文件生成一个xml输出,以列出超级文件中我需要的部分 问题是函数的类型。当我使用它迭代一个集合并有条件地输出一个值时,它会不断输出空格,以避免不匹配 这是我的密码 <xsl:attribute name="type" select=" for $index_type in $ref_indexes/@type return (if (translat

我正在使用一个基本的“超级”xml文件和一个参考xml文件生成一个xml输出,以列出超级文件中我需要的部分

问题是函数的类型。当我使用它迭代一个集合并有条件地输出一个值时,它会不断输出空格,以避免不匹配

这是我的密码

    <xsl:attribute
        name="type"
        select="
        for $index_type in $ref_indexes/@type
        return (if
        (translate($index_type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ',
        'abcdefghijklmnopqrstuvwxyz') = ./@type)
        then $index_type
        else '')) "/>
and./@type将是的单个元素

 {abc,def,ghi,jkl,mno,pqr}
结果的属性中始终包含空格,即:

type="abc..."
type=".def.."
type="..ghi."
type="...MNO"
我尝试过使用intersect并得到以下结果: “intersect”的第一个操作数的必填项类型为节点;提供的值已更改 项目类型xs:string

我尝试了使空间正常化,得到了以下结果: 不允许将多个项的序列作为的第一个参数 规范化空间

当我使用不同的值时,它只给我一个空间,这尤其令人沮丧,因为它太近了

我也尝试过检查长度>1的结果,但仍然得到了空格。我还尝试在翻译中加入空格

FWIW我正在用Java1.5.0_26和Saxon9he在OSX10.6.7上进行转换

在这个阶段,我几乎没有什么想法:

非常感谢所有人的帮助

加里

<xsl:attribute
name="type"
select="
string-join(for $index_type in $ref_indexes/@type
return (if
(translate($index_type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ',
'abcdefghijklmnopqrstuvwxyz') = ./@type)
then $index_type
else ''), '') "/>
你想怎么做?如果不考虑发布最小但完整的样本,允许我们重现问题。

[编辑]我认为简单地做

<xsl:attribute
name="type"
select="$ref_indexes/@type[translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ',
'abcdefghijklmnopqrstuvwxyz') = current()/@type]"/>

可能就足够了。

我对变量中的内容有点困惑,但在我看来

select="
        for $index_type in $ref_indexes/@type
        return (if
        (translate($index_type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ',
        'abcdefghijklmnopqrstuvwxyz') = ./@type)
        then $index_type
        else '')) "
真的就是这个意思:

select="$ref_indexes/@type[lower-case(.)=lower-case(current()/@type)]"
现在,如果选择了多个值,那么这些值将在输出中以空格分隔。这就是xsl:attribute的工作方式。您是否尝试过在xsl:attribute指令中设置separator=

恐怕你关于相交和规范化空间的信息不能很好地反映你的一般方法。它们给人的印象是,你正在努力挑选任何移动的函数并进行尝试,而不是花时间阅读和研究

select="$ref_indexes/@type[lower-case(.)=lower-case(current()/@type)]"