从xslt检查xml中的多个节点值并在html中显示

从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文件。现在我需要将html页面中的xml数据显示为一个表。为此,我必须从XSLT文件中检查XML文件中特定数据的对应值。由于我的数据库有点复杂,我在检查不同节点的多个值以及从xml文件的另一个节点选择相应的值时遇到了困难。e、 g.我有以下xml数据-

   <?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>