这个 XPath 表达式:
/*/*[2]/TD
[position()
=
count(/*/*[1]
/TD[.=$pName]/preceding-sibling::TD
) +1
]
选择“值”对应于变量pName中指定的“名称”的TD
因此,如果将上述表达式中的$pName 替换为'Field 2',则会选择以下内容:
<TD colSpan="2">Value for Field2</TD>
注意:即使在两行有不同数量的TDs 的情况下,此 XPath 表达式也会选择正确的节点。
要仅选择 TD 的文本子节点, 将 /text() 附加到表达式。
要仅获取字符串值,请使用:
string(/*/*[2]/TD
[position()
=
count(/*/*[1]
/TD[.=$pName]/preceding-sibling::TD
) +1
]
)
这是一个简短的 XSLT 转换,证明已检索到所需值:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pName" select="'Field 2'"/>
<xsl:template match="/">
<xsl:value-of select=
"/*/*[2]/TD
[position()
=
count(/*/*[1]
/TD[.=$pName]/preceding-sibling::TD
) +1
]
"/>
</xsl:template>
</xsl:stylesheet>
当对提供的 XML 文档应用此转换时(固定为格式正确):
<TABLE>
<TR>
<TD>Field 1</TD>
<TD colSpan="2">Field 2</TD>
<TD>Field 3</TD>
</TR>
<TR>
<TD>Value for Field1</TD>
<TD colSpan="2">Value for Field2</TD>
<TD>Value for Field3</TD>
<TR></TR></TR>
</TABLE>
产生了想要的结果:
Value for Field2