需要帮助为具有相同属性/属性和相同节点名称的XML编写XSL代码。
我尝试了<xsl:for-each
。它有帮助,但它只为每个表行打印第一个值。
我正在获取的XML
<PLMXML>
<Form>
<TableRow id="id15" subType="new_part_no_row" tablePropertyName="new_part_no" index="0">
<ApplicationRef version="j8Tt$2HDltBKvA" label="j8Tt$2HDltBKvA" application="Teamcenter"/>
<TableColumn title="item_no" value="vbzvb"/>
</TableRow>
<TableRow id="id16" subType="new_part_no_row" tablePropertyName="new_part_no" index="1">
<ApplicationRef version="j8Yt$2HDltBKvA" label="j8Yt$2HDltBKvA" application="Teamcenter"/>
<TableColumn title="item_no" value="vvb"/>
</TableRow>
</Form>
</PLMXML>
XSL代码:
<table border="0" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="100%">
<tr></tr>
</table>
<br/>
<table border="0" bordercolor="black" align="left" cellspacing="10" cellpadding="0" width="100%">
<tr>
<td>
<strong>
<font size="4">
<font color="#000080">TABLE PROP</font>
</font>
</strong>
</td>
</tr>
</table>
<table border="0" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="100%">
<tr></tr>
</table>
<table border="1" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="50%" height="5%">
<th>Item NO</th>
<th>Desc</th>
<xsl:for-each select="/plm:PLMXML/plm:Form/plm:TableRow">
<tr>
<td>
<xsl:value-of select="/plm:PLMXML/plm:Form/plm:TableRow[@title='item_no' and @index=current()/@index]/@value"/>
</td>
</tr>
</xsl:for-each>
</table>
我想显示如下输出。
ITEM NO
vbzvb
vvb
答案 0 :(得分:0)
在xsl:for-each
中,您位于TableRow
元素上,这意味着xsl:value-of
中的xpath表达式可以与此相对。但是,通过在表达式的开头使用/
,您将忽略当前节点,而是从文档节点开始搜索。
您只需执行此操作即可获取“ {item_no”的TableColumn
<xsl:value-of select="plm:TableColumn[@title='item_no']/@value"/>
尝试使用此XSLT(您可以在http://xsltfiddle.liberty-development.net/jyH9rNx上看到它的使用情况)。请注意,您将必须更改plm
的名称空间声明,以匹配真实XML中的实际名称
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:plm="plm.test">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<table border="1" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="50%" height="5%">
<tr>
<th>Item NO</th>
<th>Desc</th>
</tr>
<xsl:for-each select="/plm:PLMXML/plm:Form/plm:TableRow">
<tr>
<td>
<xsl:value-of select="plm:TableColumn[@title='item_no']/@value"/>
</td>
<td>
<xsl:value-of select="plm:TableColumn[@title='desc']/@value"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>