从xslt检查xml中的多个节点值并在html中显示
我有一个通过导出数据库得到的XML文件。现在我需要将html页面中的xml数据显示为一个表。为此,我必须从XSLT文件中检查XML文件中特定数据的对应值。由于我的数据库有点复杂,我在检查不同节点的多个值以及从xml文件的另一个节点选择相应的值时遇到了困难。e、 g.我有以下xml数据-从xslt检查xml中的多个节点值并在html中显示,html,xml,xslt,xpath,Html,Xml,Xslt,Xpath,我有一个通过导出数据库得到的XML文件。现在我需要将html页面中的xml数据显示为一个表。为此,我必须从XSLT文件中检查XML文件中特定数据的对应值。由于我的数据库有点复杂,我在检查不同节点的多个值以及从xml文件的另一个节点选择相应的值时遇到了困难。e、 g.我有以下xml数据- <?xml-stylesheet type='text/xsl' href='myXSL.xsl'?> <root xmlns:xsi="http://www.w3.org/2001/X
<?xml-stylesheet type='text/xsl' href='myXSL.xsl'?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name1>
<names>
<id>5</id>
<class>space</class>
<from>Germany</from>
<fm>
<id>9</id>
<names>5</names>
<name>Vienna</name>
</fm>
<fm>
<id>10</id>
<names>5</names>
<name>Prague</name>
</fm>
</names>
</name1>
<FFrom>
<effect>
<id>11</id>
<DVV>1</DVV>
<SAT>0</SAT>
<DDCC>0</DDCC>
<name>SAA Name</name>
</effect>
<effect>
<id>23</id>
<DVV>0</DVV>
<SAT>0</SAT>
<DDCC>1</DDCC>
<name>SAA Name2</name>
</effect>
</FFrom>
<name2>
<newNames>
<id>1</id>
<name>VSSS Name</name>
<route1>
<id>5</id>
<identifyer>C</identifyer>
<function>abc</function>
<names>4</names>
<naviagtes2>
<id>9</id>
<fm>7</fm>
<effect>2</effect>
</naviagtes2>
<naviagtes2>
<id>10</id>
<fm>8</fm>
<effect>5</effect>
</naviagtes2>
</route1>
</newNames>
<newNames>
<id>6</id>
<name>VEE Name</name>
<route1>
<id>18</id>
<identifyer>C0</identifyer>
<function>abc</function>
<names>5</names>
<naviagtes2>
<id>68</id>
<fm>9</fm>
<effect>11</effect>
</naviagtes2>
<naviagtes2>
<id>69</id>
<fm>10</fm>
<effect>7</effect>
</naviagtes2>
</route1>
</newNames>
</name2>
</root>
我是XSLT编程新手。谁能告诉我如何在XSLT中解决这个问题
在naviagtes2节点中,有fm和effect元素
等效于fm/id和effect/id。即,使用naviagtes2节点
检查“效果/名称”的哪些值将与
桌子
恐怕我还是不明白你的问题,但为了推进这一点,我将(在黑暗中)尝试一下
以下样式表使用键将每个naviagtes2节点链接到fm和effect元素,其ID在naviagtes2节点中列出。因此,每个naviagtes2节点创建一个{fm,effect}“对”,这些对与从成对元素获取的值一起列在结果表中:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="fm" match="name1/names/fm" use="id" />
<xsl:key name="effect" match="FFrom/effect" use="id" />
<xsl:template match="/">
<table border="1" >
<tr>
<th>id</th>
<th>fm id</th>
<th>effect id</th>
<th>fm name</th>
<th>effect name</th>
</tr>
<xsl:for-each select="root/name2/newNames/route1/naviagtes2">
<tr>
<td><xsl:value-of select="id" /></td>
<td><xsl:value-of select="fm" /></td>
<td><xsl:value-of select="effect" /></td>
<td><xsl:value-of select="key('fm', fm)/name" /></td>
<td><xsl:value-of select="key('effect', effect)/name" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
身份证件
调频识别码
效果id
fm名称
效果名称
应用于示例输入时,结果为:
<?xml version="1.0" encoding="UTF-8"?>
<table border="1">
<tr>
<th>id</th>
<th>fm id</th>
<th>effect id</th>
<th>fm name</th>
<th>effect name</th>
</tr>
<tr>
<td>9</td>
<td>7</td>
<td>2</td>
<td/>
<td/>
</tr>
<tr>
<td>10</td>
<td>8</td>
<td>5</td>
<td/>
<td/>
</tr>
<tr>
<td>68</td>
<td>9</td>
<td>11</td>
<td>Vienna</td>
<td>SAA Name</td>
</tr>
<tr>
<td>69</td>
<td>10</td>
<td>7</td>
<td>Prague</td>
<td/>
</tr>
</table>
身份证件
调频识别码
效果id
fm名称
效果名称
9
7.
2.
10
8.
5.
68
9
11
维也纳
SAA名称
69
10
7.
布拉格
在HTML中,将呈现为:
希望这能让您更接近您的目标。如果您显示XSLT不正常工作,您更有可能得到有用的响应和解释。简化为essentials的较短工作示例的服务也是一件好事。请添加有效的XSLT(不仅仅是片段),以便我们可以看到您的尝试。您的XML代码无效,XSLT不完整。请发布代码,使我们能够复制并运行问题,而无需修改。@michael.hor257k实际上,我不适合发布原始代码。我只需要这个查询如何工作的提示。我已经解释了我问题的关键部分。你能帮我吗?“我不适合发布原始代码。”我不在乎它是原始的还是假的。为了让代码运行,我真的很在乎浪费时间修改代码。只有运行它并重现问题,我才能建议如何修复它。还要注意,你说“它显示了错误的值”-但你也应该说“正确”的值是什么。非常感谢。你明白我的意思,部分解决了我的问题。现在fm名称和效果名称是一致的,但您只使用了一个循环,而忽略了我在XSLT代码中提到的其他循环。这就是为什么它会在每次迭代中显示所有值:(@Cracker)您必须找到一种方法将其合并到您所拥有的内容中,或者使您的问题更清楚。请注意,尽管评论会在一周多的时间里反复出现(!)现在,你还没有公布预期的结果。我愿意投入的时间和耐心是有限的。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="fm" match="name1/names/fm" use="id" />
<xsl:key name="effect" match="FFrom/effect" use="id" />
<xsl:template match="/">
<table border="1" >
<tr>
<th>id</th>
<th>fm id</th>
<th>effect id</th>
<th>fm name</th>
<th>effect name</th>
</tr>
<xsl:for-each select="root/name2/newNames/route1/naviagtes2">
<tr>
<td><xsl:value-of select="id" /></td>
<td><xsl:value-of select="fm" /></td>
<td><xsl:value-of select="effect" /></td>
<td><xsl:value-of select="key('fm', fm)/name" /></td>
<td><xsl:value-of select="key('effect', effect)/name" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<table border="1">
<tr>
<th>id</th>
<th>fm id</th>
<th>effect id</th>
<th>fm name</th>
<th>effect name</th>
</tr>
<tr>
<td>9</td>
<td>7</td>
<td>2</td>
<td/>
<td/>
</tr>
<tr>
<td>10</td>
<td>8</td>
<td>5</td>
<td/>
<td/>
</tr>
<tr>
<td>68</td>
<td>9</td>
<td>11</td>
<td>Vienna</td>
<td>SAA Name</td>
</tr>
<tr>
<td>69</td>
<td>10</td>
<td>7</td>
<td>Prague</td>
<td/>
</tr>
</table>