我正在使用基本的“超级”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 '')) "/>
$ref_indexes/@type
可以包含的地方
"abc def ghi MNO"
和./@type
将是
{abc,def,ghi,jkl,mno,pqr}
结果始终在属性中包含空格,即:
type="abc..."
type=".def.."
type="..ghi."
type="...MNO"
“'intersect'的第一个操作数的必需项类型是node();提供的值有 item type xs:string“
nomalize-space
并得到了这个:“不允许多个项目的序列作为第一个参数 正常化空间()“
当我使用distinct-values
时,它只给我一个空间,这特别令人沮丧,因为它非常接近!
我已经尝试检查结果的长度&gt; 1,还是我得到了空间。我也尝试在翻译中加入一个空格。
FWIW我正在使用Java 1.5.0_26和Saxon 9 HE在OSX(10.6.7)上进行转换。
在这个阶段,我几乎没有想法:(
所有和任何帮助都热烈赞赏,
加里
答案 0 :(得分:0)
确实
<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]"/>
可能就够了。
答案 1 :(得分:0)
我对你变量中的内容感到有点困惑,但在我看来,这个
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 =“”?
我担心你的关于“相交”和“规范化空间”的信息并不能很好地反映你的一般方法。他们给人的印象是,你在挑选任何移动并试一试的功能,而不是花时间阅读和学习。