XSLT - 如果属性等于特定值,如何获取标记的值

时间:2015-11-18 11:09:24

标签: xml xslt

我正在尝试根据不同标记的属性获取不同的值。 我的xml输入:

<parties>
<party code="ADV" id="BOFAUS3NXXX" extension="1">
<name1>BANK OF AMERICA, N.A.</name1>
<city>Code: NY3-222-14-03</city>
<street>Bank of America Merrill Lynch Mail</street>
<country>US</country>
<swift_address/>
</party>
<party code="BNE" id="11111111-1" extension="1">
<name1>BBA Customer 1</name1>
<city>PROVIDENCIA</city>
<street>PROVIDENCIA 1645</street>
<country>ES</country>
<swift_address/>
</party>
</parties>

如果聚会代码=“ADV”

,我正试图在name1中获取值

我尝试使用以下表达式,但它不起作用:

<xsl:if test="value-of select=("ns1:parties/ns1:party/@code")='ADV'">
   <td>1st Advising Bank Name: <xsl:value-of select="ns1:parties/ns1:party/name1/></td>

有人有任何想法吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

您正在寻找的表达式是

<xsl:if test="parties/party/@code='ADV'">
   <td>1st Advising Bank Name: <xsl:value-of select="parties/party[@code='ADV']/name1" /></td>
</xsl:if>

注意,我在这里排除了ns1名称空间前缀,因为显示的XML示例没有声明任何名称空间。

或者,使用模板匹配。使用xsl:apply-templates选择匹配的party元素

 <xsl:apply-templates select="parties/party[@code='ADV']" />

然后有一个匹配它的模板

<xsl:template match="party">
   <td>1st Advising Bank Name: <xsl:value-of select="name1" /></td>
</xsl:template>