【发布时间】:2020-01-21 11:17:57
【问题描述】:
当且仅当源 XML 的元素值不为空时,我想在目标 XML 中创建新元素。我可以使用下面的代码来做到这一点。但是,我的问题是我有大约 5k 场以类似的条件包装。我们有没有更好的方法来处理这个问题?
<xsl:if test="edi:po-num"> //wanted to avoid this for each element
<xsl:element name="element">
<xsl:attribute name="name">order_reference_number</xsl:attribute>
<xsl:value-of select="edi:po-num"/>
</xsl:element>
</xsl:if>
要转换的java代码:
Transformer trans = StylesheetCache.newTransformer(xslFilePath);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
trans.transform(source, new StreamResult(outputStream));
【问题讨论】:
-
定义“空”。您的代码检查是否存在
po-num元素,如果这是您唯一关心的问题,那么当然应该更容易通过创建<element name="order_reference_number"><xsl:value-of select="."/></element>的模板使用apply-templates推送现有节点,或者可能参数化name属性值。 -
请(在所有 XSLT 问题中)说出您使用的是哪个 XSLT 版本。 2.0 和 3.0 中有许多功能对卡在 1.0 上的用户不可用。
-
@MichaelKay 已更新 XSLT 版本...
-
您的问题不清楚。请张贴minimal reproducible example 显示带有多个“字段”的输入示例和预期结果。