提问人:Arun M 提问时间:11/1/2023 更新时间:11/1/2023 访问量:62
带有分隔符的循环中的 Concat 元素
Concat element in a loop with Separator
问:
我面临的问题似乎很简单。我想做的是通过连接 foreach 元素循环的结果来构建一个字符串。
数据 XML:
<OutboundPaymentInstruction>
<DocumentPayable>
<DocumentNumber>
<ApplicationInternalID>200</ApplicationInternalID>
<ReferenceNumber>TEST_003</ReferenceNumber>
<DocCategory>STD INV</DocCategory>
<SequenceName>SEQ1</SequenceName>
<SequenceValue>520822000792</SequenceValue>
</DocumentNumber>
</DocumentPayable>
<DocumentPayable>
<DocumentNumber>
<ApplicationInternalID>200</ApplicationInternalID>
<ReferenceNumber>TEST_004</ReferenceNumber>
<DocCategory>STD INV</DocCategory>
<SequenceName>SEQ1</SequenceName>
<SequenceValue>520822000792</SequenceValue>
</DocumentNumber>
</DocumentPayable>
<DocumentPayable>
<DocumentNumber>
<ApplicationInternalID>200</ApplicationInternalID>
<ReferenceNumber>TEST_005</ReferenceNumber>
<DocCategory>STD INV</DocCategory>
<SequenceName>SEQ1</SequenceName>
<SequenceValue>520822000792</SequenceValue>
</DocumentNumber>
</DocumentPayable>
</OutboundPaymentInstruction>
预期输出:不应超过 140 个字符。TEST_003/TEST_004/TEST_005
我尝试使用XSL文件,但ReferenceNumber就像图像输入图像描述一样
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="OutboundPaymentInstruction">
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:variable name="Invoices" select="DocumentNumber/ReferenceNumber"/>
<Ustrd>
<xsl:for-each select="DocumentPayable/DocumentNumber">
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:value-of select="ReferenceNumber"/>
</xsl:when>
<xsl:otherwise>
/<xsl:value-of select="ReferenceNumber"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</Ustrd>
</Document>
</xsl:template>
</xsl:stylesheet>
请帮忙。
答:
0赞
Rob Eyre
11/1/2023
#1
您可以简化 for-each 循环的内容,并省略隐式空格:
<xsl:for-each select="DocumentPayable/DocumentNumber">
<xsl:if test="position() > 1">
<xsl:text>/</xsl:text>
</xsl:if>
<xsl:value-of select="ReferenceNumber"/>
</xsl:for-each>
评论
0赞
Arun M
11/2/2023
如何将结果限制为 140 个字符?
0赞
Arun M
11/7/2023
谢谢,这有效,但是我们如何将输出限制为 140 个字符?
0赞
Yitzhak Khabinsky
11/1/2023
#2
一个函数调用就可以完成这项工作,而无需任何循环。
XSLT 2.0 片段
string-join(/OutboundPaymentInstruction/DocumentPayable/DocumentNumber/ReferenceNumber, "/")
输出
TEST_003/TEST_004/TEST_005
评论
0赞
michael.hor257k
11/1/2023
string-join()
需要 XSLT 2.0+。
0赞
Michael Kay
11/1/2023
#3
XSLT 会忽略样式表中完全由空格组成的文本节点,但不会忽略与可见文本相邻的空格。因此,在您的示例中,“/”分隔符前面的空格被认为是重要的。您可以通过使用 或将其包含在指令值中来解决这个问题:<xsl:text>/</xsl:text>
<xsl:value-of select="concat('/', ReferenceNumber)"/>
评论
0赞
Arun M
11/3/2023
如何将结果限制为 140 个字符?
0赞
Michael Kay
11/3/2023
最好一次问一个问题,最好告诉我们您使用的是哪个 XSLT 版本。
0赞
Arun M
11/4/2023
我一下子问你们没有完全阅读它..我已经提到过它的预期输出
0赞
Michael Kay
11/4/2023
有几个人问您使用的是哪个版本的 XSLT,但您没有回答。我不会浪费我和你的时间给你一个可能不适用于你的 XSLT 版本的答案。
0赞
Arun M
11/5/2023
在示例 XSL 中已经提到过,版本是 1.0....
评论