2012-08-15 82 views
0

我有一個地址,我需要在第一個空白空間後拆分(我認爲可以安全地假設街道名稱在第一個空格之後開始)。然後,我需要將每段文本(街道名稱/門號/郵政信箱)分配給不同的節點。所有標點符號也需要刪除。複雜的xslt地址拆分

的代碼需要採取這樣的:

<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> 

我已經看到了如何給內的某個字符或位置分割字符串的幾個問題一個字符串,但從不使用這兩個參數。我最初以爲要掃描字符串並挑選出任何數字,但我認爲這不適用於P.O。箱號或編號的街道。

我在想我需要使用substring-before和substring-after操作符,但我不知道如何正確實現它們。此外,這是相當複雜的,我甚至不知道從哪裏開始

感謝,

艾倫

+0

您是否在尋找一個通用的地址解析方案,或可我們依賴於諸如從'streed_name'和'',''從'addr_postfix'中分離'street_name'的第一個空格分隔的第一個空格? – 2012-08-16 01:08:26

+0

不會總是有一個逗號將地址與後綴分開(我用一個表示標點符號需要刪除),但通常會有一個空格將door_num與street_name分開 – 2012-08-16 13:15:48

回答

0

這解決了特定情況下的例如地址,可以讓你開始:

<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> 
1

這裏是所提供的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> 
+0

感謝您的快速響應, Dimitre。不幸的是,我忘了指定addr_postfix並不總是在逗號後面。機會是,地址後綴將被一個空格分隔。 – 2012-08-16 13:26:23

+0

@AllenMcDonald,這就是爲什麼Mads和我說:「for * this * XML文檔」。你是否意識到你沒有明確的問題?如果是這樣,這根本就不是問題 - 問題是定義問題。 – 2012-08-16 13:32:54

+0

我明白我沒有明確的問題,但是我無法控制我們的客戶給我們的地址格式。有些包含逗號,有些則不包含。我負責分離數據,並提供瞭解決一個將會改變的示例問題的信息。如果我不夠清楚,我表示歉意,但如果我要定義每一種情況,那將會非常複雜和令人困惑。 – 2012-08-16 14:01:56