2015-04-28 57 views
0

我想在一行中顯示地址。我該怎麼做呢? 我的代碼僅顯示這樣的:如何連接4個元素?

<nc:StreetFullText>607 Main St W</nc:StreetFullText> 

我知道我需要「城市」,「國家」,「郵編」添加到我的代碼行AssociatedValue[@type='Street1']/Text結束,但我不知道如何做到這一點。

所需的輸出

<nc:StreetFullText>607 Main St W, New York, DC 77777</nc:StreetFullText> 

我的XML

 <EnumerationValue code="DC042015J"> 
    <AssociatedValue type="Street1"> 
     <Text>607 Main St W</Text> 
    </AssociatedValue> 
    <AssociatedValue type="City"> 
     <Text>New York</Text> 
    </AssociatedValue> 
    <AssociatedValue type="State"> 
     <Text>MN</Text> 
    </AssociatedValue> 
    <AssociatedValue type="Zip"> 
     <Text>77777</Text> 
    </AssociatedValue> 
    </EnumerationValue> 
    <EnumerationValue code="DC046015J"> 

XSLT代碼

<nc:StreetFullText> 
    <xsl:variable name="vCourtORI"> 
     <xsl:value-of select="/Integration/Case/Court/CourtNCIC"/> 
    </xsl:variable> 
    <xsl:value-of select="document(concat($gEnvPath,'\Schemas\CourtXML\SimpleTypes\CourtLocationTextType.xml'))/SimpleTypeCompanion/EnumerationValue[@code=$vCourtORI]/AssociatedValue[@type='Street1']/Text"/> 
</nc:StreetFullText> 

回答

0

考慮使用一個變量在文檔中選擇所有AssociatedValue元素

<xsl:variable name="values" 
       select="document(concat($gEnvPath,'\Schemas\CourtXML\SimpleTypes\CourtLocationTextType.xml'))/SimpleTypeCompanion/EnumerationValue[@code=$vCourtORI]/AssociatedValue" /> 

然後你就可以得到街道和地址僅僅通過這樣的其餘部分:

<xsl:value-of select="concat($values[@type='Street1']/Text, ', ', $values[@type='City']/Text, ', ', $values[@type='State']/Text, ' ', $values[@type='Zip']/Text)"/> 

或者,你寫出來的獨立聲明顯示地址,而不是嘗試做在同一行

<xsl:value-of select="$values[@type='Street1']/Text"/> 
<xsl:text>, </xsl:text> 
<xsl:value-of select="$values[@type='City']/Text"/> 
<xsl:text>, </xsl:text> 
<xsl:value-of select="$values[@type='State']/Text"/> 
<xsl:text> </xsl:text> 
<xsl:value-of select="$values[@type='Zip']/Text"/> 
+0

非常感謝。我沒有這樣想。現在正在工作,如此處所示: 607 Main St W,Marshall,MN 56258 Angela

0

另一種選擇是做一個xsl:apply-templates的匹配EnumerationValue(它看起來像有多個),並在單獨的模板中執行xsl:value-of

如果您需要以不同的方式處理不同的EnumerationValue元素,則可以使用一種模式。在下面的示例中,我特別使用sft模式處理StreetFullText

(我還沒有使用的命名空間或document()保持示例簡單。)

XML輸入

<SimpleTypeCompanion> 
    <EnumerationValue code="DC042015J"> 
     <AssociatedValue type="Street1"> 
      <Text>607 Main St W</Text> 
     </AssociatedValue> 
     <AssociatedValue type="City"> 
      <Text>New York</Text> 
     </AssociatedValue> 
     <AssociatedValue type="State"> 
      <Text>MN</Text> 
     </AssociatedValue> 
     <AssociatedValue type="Zip"> 
      <Text>77777</Text> 
     </AssociatedValue> 
    </EnumerationValue>  
</SimpleTypeCompanion> 

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/"> 
     <xsl:variable name="vCourtORI" select="'DC042015J'"/> 
     <StreetFullText> 
      <xsl:apply-templates select="/SimpleTypeCompanion/EnumerationValue[@code=$vCourtORI]" mode="sft"/> 
     </StreetFullText> 
    </xsl:template> 

    <xsl:template match="EnumerationValue" mode="sft"> 
     <xsl:value-of select="*[not(@type='Zip')]/Text" separator=", "/> 
     <xsl:value-of select="concat(' ',*[@type='Zip']/Text)"/> 
    </xsl:template> 

</xsl:stylesheet> 

XML輸出

<StreetFullText>607 Main St W, New York, MN 77777</StreetFullText> 

我在示例中使用了XSLT 2.0,因爲您沒有指定什麼版本。如果您使用的是XSLT 1。

  • 一個xsl:for-each
  • 多個xsl:value-of
  • 單個xsl:value-ofconcat()使用
  • 一個xsl:apply-templates具有匹配覆蓋
  • 等:0,則可以用separator屬性與任一取代xsl:value-of ..

如果您使用XSLT 2.0,則還可以在EnumerationValue模板中使用單個xsl:value-of。這有點難以閱讀:

<xsl:value-of select="concat(string-join(*[not(@type='Zip')]/Text,', '),' ',*[@type='Zip']/Text)"/>