Select xml 内部数据的值与 xslt for 循环?
Select value of xml inner data with xslt for-loop?
如何在不更改给定的 xml 格式的情况下,在 for-each 循环中 select xml/xslt 中元素节点的内部值。
XML:
<folio name="f1r" wordCount="210" width="1090" height="1500">
<word index="0" x="97" y="128" width="106" height="96">fachys</word>
<word index="1" x="225" y="164" width="58" height="61">ykal</word>
...
</folio>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Folio Info</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Folio Name</th>
<th style="text-align:left">Word Count</th>
<th style="text-align:left">width</th>
<th style="text-align:left">height</th>
</tr>
<xsl:for-each select="folio">
<tr>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="@wordCount"/></td>
<td><xsl:value-of select="@width"/></td>
<td><xsl:value-of select="@height"/></td>
</tr>
</xsl:for-each>
</table>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">index</th>
<th style="text-align:left">Wordnnnnnnnnnn</th>
<th style="text-align:left">x loc</th>
<th style="text-align:left">y loc</th>
<th style="text-align:left">height</th>
<th style="text-align:left">width</th>
</tr>
<xsl:for-each select="folio/word">
<tr>
<td><xsl:value-of select="@index"/></td>
<td><xsl:value-of select="../word"/></td>
<td><xsl:value-of select="@x"/></td>
<td><xsl:value-of select="@y"/></td>
<td><xsl:value-of select="@height"/></td>
<td><xsl:value-of select="@width"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
结果:
如您所见,它正在重复“fachys”而不是“ykal”。它对所有节点都这样做,我刚刚截图了前五个。但问题是我不想把值变成它自己的属性或子节点,因为所有数据都已经这样了。自从我擅长 xml 以来已经有一段时间了,所以我有点生疏了。有什么想法吗?
这没有意义。
<xsl:for-each select="folio/word">
<!-- ... -->
<td><xsl:value-of select="../word"/></td>
<!-- ... -->
</xsl:for-each>
你想要
<xsl:for-each select="folio/word">
<!-- ... -->
<td><xsl:value-of select="."/></td>
<!-- ... -->
</xsl:for-each>
第一个代码转到 <word>
(每个 <word>
“”的 ),从那里开始,XPath ../word
上升一级(至 <folio>
)并再次选择所有 <word>
。当你给多个节点赋值时,它只会考虑第一个节点。这就是为什么你总是得到 fachys
作为结果。
要输出当前节点时使用.
如何在不更改给定的 xml 格式的情况下,在 for-each 循环中 select xml/xslt 中元素节点的内部值。
XML:
<folio name="f1r" wordCount="210" width="1090" height="1500">
<word index="0" x="97" y="128" width="106" height="96">fachys</word>
<word index="1" x="225" y="164" width="58" height="61">ykal</word>
...
</folio>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Folio Info</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Folio Name</th>
<th style="text-align:left">Word Count</th>
<th style="text-align:left">width</th>
<th style="text-align:left">height</th>
</tr>
<xsl:for-each select="folio">
<tr>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="@wordCount"/></td>
<td><xsl:value-of select="@width"/></td>
<td><xsl:value-of select="@height"/></td>
</tr>
</xsl:for-each>
</table>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">index</th>
<th style="text-align:left">Wordnnnnnnnnnn</th>
<th style="text-align:left">x loc</th>
<th style="text-align:left">y loc</th>
<th style="text-align:left">height</th>
<th style="text-align:left">width</th>
</tr>
<xsl:for-each select="folio/word">
<tr>
<td><xsl:value-of select="@index"/></td>
<td><xsl:value-of select="../word"/></td>
<td><xsl:value-of select="@x"/></td>
<td><xsl:value-of select="@y"/></td>
<td><xsl:value-of select="@height"/></td>
<td><xsl:value-of select="@width"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
结果:
如您所见,它正在重复“fachys”而不是“ykal”。它对所有节点都这样做,我刚刚截图了前五个。但问题是我不想把值变成它自己的属性或子节点,因为所有数据都已经这样了。自从我擅长 xml 以来已经有一段时间了,所以我有点生疏了。有什么想法吗?
这没有意义。
<xsl:for-each select="folio/word">
<!-- ... -->
<td><xsl:value-of select="../word"/></td>
<!-- ... -->
</xsl:for-each>
你想要
<xsl:for-each select="folio/word">
<!-- ... -->
<td><xsl:value-of select="."/></td>
<!-- ... -->
</xsl:for-each>
第一个代码转到 <word>
(每个 <word>
“”的 ),从那里开始,XPath ../word
上升一级(至 <folio>
)并再次选择所有 <word>
。当你给多个节点赋值时,它只会考虑第一个节点。这就是为什么你总是得到 fachys
作为结果。
要输出当前节点时使用.