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

Nir*_*Nir 0 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>
Run Code Online (Sandbox Code Playgroud)

如果方代码=“ 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>
Run Code Online (Sandbox Code Playgroud)

有人知道吗?

提前致谢

Tim*_*m C 5

您要寻找的表情是这个

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

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

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

 <xsl:apply-templates select="parties/party[@code='ADV']" />
Run Code Online (Sandbox Code Playgroud)

然后有一个模板来匹配它

<xsl:template match="party">
   <td>1st Advising Bank Name: <xsl:value-of select="name1" /></td>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)