我想在一行中显示地址。我该怎么做呢? 我的代码只展示了这一点:
<nc:StreetFullText>607 Main St W</nc:StreetFullText>
我知道我需要添加&#39; City&#39;,&#39; State&#39;,&#39; Zip&#39;到我的代码行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 :(得分: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"/>
答案 1 :(得分: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.0,则可以使用xsl:value-of
属性替换separator
:
xsl:for-each
xsl:value-of
的xsl:value-of
concat()
xsl:apply-templates
如果您使用的是XSLT 2.0,则还可以在xsl:value-of
模板中使用一个EnumerationValue
。但是阅读起来有点困难:
<xsl:value-of select="concat(string-join(*[not(@type='Zip')]/Text,', '),' ',*[@type='Zip']/Text)"/>