>我有一个地址,我需要在第一个空格之后拆分(我认为可以安全地假设街道名称在第一个空格之后开始)。然后,我需要将文本的每个部分(街道名称/门号/邮政信箱)分配给不同的节点。还需要删除所有标点符号。
代码需要采用以下内容:
<address>123 1st St., P.O. Box 321</address>
并把它变成这样:
<door_num>123</door_num>
<street_name>1st St</street_name>
<addr_postfix>PO Box 321</addr_postfix>
我已经看到了几个关于如何在给定字符串中的某个字符或位置的情况下拆分字符串的问题,但从未同时使用这两个参数。我最初想扫描字符串并挑选出任何数字,但我认为这不适用于邮政信箱号码或编号街道。
我想我需要使用子字符串之前和子字符串之后的运算符,但我不知道如何正确实现它们。另外,这很复杂,我什至不知道从哪里开始
谢谢
艾伦
下面是一个完整的转换,适用于提供的 XML 文档:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="address">
<xsl:variable name="vNum" select="substring-before(.,' ')"/>
<xsl:variable name="vStreet" select=
"substring-before(substring-after(.,$vNum), ',')"/>
<xsl:variable name="vPOBox" select="substring-after(.,',')"/>
<door_num><xsl:value-of select="$vNum"/></door_num>
<street_name>
<xsl:value-of select="normalize-space(translate($vStreet, '.',''))"/>
</street_name>
<addr_postfix>
<xsl:value-of select="normalize-space(translate($vPOBox, '.',''))"/>
</addr_postfix>
</xsl:template>
</xsl:stylesheet>
应用于提供的 XML 文档时:
<address>123 1st St., P.O. Box 321</address>
生成所需的正确结果:
<door_num>123</door_num>
<street_name>1st St</street_name>
<addr_postfix>PO Box 321</addr_postfix>
这解决了示例地址的特定情况,并可以帮助您入门:
<xsl:template match="address">
<door_num>
<xsl:value-of select="substring-before(., ' ')"/>
</door_num>
<street_name>
<xsl:value-of select="translate(substring-before(substring-after(., ' '), ','), '.', '')"/>
</street_name>
<addr_postfix>
<xsl:value-of select="translate(normalize-space(substring-after(., ',')), '.', '')"/>
</addr_postfix>
</xsl:template>