如何避免在 XSLT 中生成空属性?
我已经使用以下代码编写了 XSLT 文件:
<xsl:attribute name="subCode">
<xsl:value-of select="Field[@key='XY']"/>
</xsl:attribute>
假设我的 INPUT XML 如下所示:
[...]
<Field key="XY"/>
[...]
在这种情况下,我的 XSLT 将生成以下输出:
<SomeElement subCode="">
[...]
</SomeElement>
我的问题是: 如何摆脱空属性 subCode=""< /代码>?
我知道可以通过使用像
这样的条件指令来实现,但是,这似乎是一个丑陋的解决方案(因为我在 XSLT 中生成了数千个类似的属性)。
它必须在同一个 XSLT 中完成。我无法在其他 XSLT 文件中添加后处理。
除此之外,输出 XML 已定义其 XSD 架构。架构表明此属性是可选。也许有某种方法可以将该 XSD 架构应用于输出 XML?
预先感谢您的任何帮助!
I have written XSLT file with the following code:
<xsl:attribute name="subCode">
<xsl:value-of select="Field[@key='XY']"/>
</xsl:attribute>
Let's say that my INPUT XML looks like this:
[...]
<Field key="XY"/>
[...]
In this case my XSLT would generate the following output:
<SomeElement subCode="">
[...]
</SomeElement>
My question is: How to ged rid of empty attribute subCode=""
?
I know that it is possible by using some conditional instruction like <xsl:if>
, however, this seems to be an ugly solution (because I have thousands of similar attributes generated in my XSLT).
It must be done in the same XSLT. I cannot add post-processing in additional XSLT file.
Besides that, the output XML has got its XSD Schema defined. And the schema says that this attribute is optional. Maybe there is some way to apply that XSD schema for the output XML?
Thanks in advance for any help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用:
当此转换应用于以下 XML 文档时:
生成所需的正确结果(根本不生成任何属性):
当源 XML 文档是这样的时:
相同的转换再次产生正确的、想要的结果;
Use:
when this transformation is applied on the following XML document:
the wanted, correct result (no attribute at all is generated) is produced:
when the source XML document is this:
the same transformation again produces the correct, wanted result;
您可以定义一个模板来匹配该属性,该属性将为您提供缺少的
@key
的正确输出,但如果您还添加谓词[.!='']
它然后还应该忽略没有值的属性。或者在您的示例中,如果您只想
@key='XY'
匹配,请使用:编辑: 这是我用来测试此功能的更完整的示例。
源 XML
附带 XSL
结果
You can define a template to match the attribute which will give you the correct output for a missing
@key
but if you also add the predicate[.!='']
it should then also ignore the attributes with no value.Or in your example if you only want the
@key='XY'
matches use:Edit: Here is a more complete example that I used to test this.
Source XML
Accompanying XSL
Result
您应该将以下模板应用于您的属性:
此模板匹配所有值为 'XY' 的 key 属性:
此模板匹配所有带有(文本)的 key 属性值长于 0:
最后,此模板匹配所有为空的属性 (*):
因此,如果您有类似的输入,
则可以生成输出:
使用以下 xslt:
You should apply the following templates to your attributes:
This template matches all key the attributes who's value is 'XY':
This template matches all the key attributes with a (text)value longer than 0:
And finally this template matches all the attributes (*) that are empty:
So if you have an input like
You can generate an output:
using the following xslt: