【发布时间】:2018-03-14 14:50:22
【问题描述】:
我需要帮助,请根据它的字符长度以及它是否在单词中间以及是否有任何逗号来拆分 XML 中的源数据。 EG:我的收货地址行的长度不能超过 35 个字符(这包括任何空格、逗号等,理想情况下我想拆分地址以确保我想输出的 2 个地址行不超过 35 个字符,如果我根据这个最大限制拆分源数据,我要么在逗号处执行,要么在单词末尾执行,然后将剩余数据附加到下一行,等等开,以免丢失客户提供的任何数据(在可避免的情况下)。
我目前正在使用 XSLT 版本 1,但如果需要,可以支持使用版本 2。
这是我的源数据,我一直在尝试做什么以及我想要的输出是什么。仅供参考,我的输出采用管道分隔格式。
XML
<AddressData>
<Delivery>
<ConsigneeAddress>Rosedal 67, departamento 3A, Lomasde Chapultepec, Miguel hidalgo</ConsigneeAddress>
<ConsigneeAddress2/>
</Delivery>
<Delivery>
<ConsigneeAddress>Str.Codreanu,30, Chisinau, MD-200018,</ConsigneeAddress>
<ConsigneeAddress2>Moldova, Republic of</ConsigneeAddress2>
</Delivery>
</AddressData>
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/">
<xsl:for-each select="/AddressData/Delivery">
<xsl:choose>
<xsl:when test="string-length(./ConsigneeAddress) > 35">
<xsl:value-of select="substring-before(./ConsigneeAddress,',')"/><xsl:text>, </xsl:text><xsl:value-of select="substring-before(substring-after(./ConsigneeAddress,','),',')"/>
<xsl:if test="./ConsigneeAddress2=''">
<xsl:text>|</xsl:text>
<xsl:value-of select="normalize-space(substring-before(substring-after(substring-after(./ConsigneeAddress,','),','),./ConsigneeZipCode))"/>
</xsl:if>
<xsl:if test="./ConsigneeAddress2!=''">
<xsl:text>|</xsl:text>
<xsl:value-of select="normalize-space(./ConsigneeAddress2)"/><xsl:text>, </xsl:text><xsl:value-of select="normalize-space(substring-after(substring-after(./ConsigneeAddress,','),','))"/>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="./ConsigneeAddress"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="./ConsigneeAddress2"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
期望的输出:
Rosedal 67,departamento 3A|Lomasde Chapultepec,米格尔伊达尔戈
Str.Codreanu,30, 基希讷乌,|MD-200018, 摩尔多瓦, 共和国
任何帮助/帮助将不胜感激。提前谢谢你。
【问题讨论】:
-
请您编辑您的问题,以将源 XML 和 XSLT 包含为代码(可以轻松复制并粘贴到 XML 工具中,例如 xsltransform.net)而不是图像。谢谢。
-
当然,我可以尝试再次添加代码。当我在发布帖子之前这样做时,格式看起来不正确,就像我读过的其他帖子一样,它保留了所使用的编辑器(例如 XMLSpy)的格式和颜色,但我无法复制这一点。又来了:
-
来源:
<AddressData><Delivery><ConsigneeAddress>Rosedal 67, departamento 3A, Lomasde Chapultepec, Miguel hidalgo</ConsigneeAddress><ConsigneeAddress2></ConsigneeAddress2></Delivery></Delivery><Delivery><ConsigneeAddress>Str.Codreanu,30, Chisinau, MD-200018,</ConsigneeAddress><ConsigneeAddress2>Moldova, Republic of</ConsigneeAddress2></Delivery>@98765433334 -
XSLT:我尝试添加 XSLT,但收到超过最大字符数的错误,因此我已将文件上传到 Google Drive 并为其创建了链接:@ 987654322@
-
我已将 XML 和 XSLT 添加到您的问题中。