我在XSLT转换中缺少什么?

时间:2017-05-19 16:14:26

标签: xslt

我认为这可能是一个愚蠢的问题,但我阅读了文档,但它仍然不适合我。 我有这个graphxml(生成我的mvn):

<?xml version="1.0" encoding="UTF-8"?> <graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <key for="node" id="d0" yfiles.type="nodegraphics"/> 
  <key for="edge" id="d1" yfiles.type="edgegraphics"/> 
<graph id="dependencies" edgedefault="directed">
<node id="966567431"><data key="d0"><y:ShapeNode><y:NodeLabel>myproject.mulesoft.services:utilitymgmt-services:mule:3.0.0-SNAPSHOT</y:NodeLabel></y:ShapeNode></data></node>
<node id="706960270"><data key="d0"><y:ShapeNode><y:NodeLabel>myproject.mulesoft.context:custom-runtime-context:jar:1.0.0-SNAPSHOT:compile</y:NodeLabel></y:ShapeNode></data></node>
<edge source="966567431" target="706960270"><data key="d1"><y:PolyLineEdge><y:EdgeLabel>compile</y:EdgeLabel></y:PolyLineEdge></data></edge>
<node id="1985178707"><data key="d0"><y:ShapeNode><y:NodeLabel>myproject.mulesoft.library:common-error-library:jar:2.0.0-SNAPSHOT:compile</y:NodeLabel></y:ShapeNode></data></node>
<node id="953191605"><data key="d0"><y:ShapeNode><y:NodeLabel>myproject.mulesoft.notification:utility-common-domains:jar:3.0.0-SNAPSHOT:compile</y:NodeLabel></y:ShapeNode></data></node>
<edge source="1985178707" target="953191605"><data key="d1"><y:PolyLineEdge><y:EdgeLabel>compile</y:EdgeLabel></y:PolyLineEdge></data></edge>
<edge source="966567431" target="1985178707"><data key="d1"><y:PolyLineEdge><y:EdgeLabel>compile</y:EdgeLabel></y:PolyLineEdge></data></edge>
</graph></graphml>

此时我想做的就是生成一个HTML,显示一个包含依赖关系的表:

依赖

myproject.mulesoft.services:utilitymgmt-services:mule:3.0.0-SNAPSHOT myproject.mulesoft.context:定制运行时上下文:罐:1.0.0-SNAPSHOT:编译

编译

myproject.mulesoft.library:常见错误库:罐:2.0.0-SNAPSHOT:编译 myproject.mulesoft.notification:公用事业共域:罐:3.0.0-SNAPSHOT:编译

编译

编译

所以这是我的xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>Dependency</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Items</th>
      </tr>
 <xsl:for-each select="*">       
<tr>

        <td><xsl:value-of select="/"/></td>

      </tr>
</xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

我希望将列表中的每个项目都放到一个单独的TR TD中。 但相反,它全部进入相同的TR TD。

    Items
    com.quadreal.mulesoft.services:qr-identitymgmt-services:mule:3.0.0-SNAPSHOT com.quadreal.mulesoft.context:quadreal-runtime-context:jar:1.0.0-SNAPSHOT:compile compile com.quadreal.mulesoft.library:qr-common-error-library:jar:2.0.0-SNAPSHOT:compile com.quadreal.mulesoft.notification:quadreal-utility-common-domains:jar:3.0.0-SNAPSHOT:compile compile compile

即使我删除for-each标记并仅保留

它仍然显示整个事物,而只显示第一个元素。 还尝试为图表和每个元素添加一个模板,但后来我甚至没有得到html。我只获得了依赖项的全文。 我是否遗漏了某些内容,或者图谱中存在未正确生成的内容?

我在这里添加了预期的HTML代码:

<html>
  <body>
    <h2>Dependency</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Items</th>
      </tr>
      <tr>
        <td>myproject.mulesoft.services:utilitymgmt-services:mule:3.0.0-SNAPSHOT
        </td>
      </tr>
      <tr>
        <td>myproject.mulesoft.context:custom-runtime-context:jar:1.0.0-SNAPSHOT:compile
       </td>
      </tr>
      <tr>
        <td>compile</td>
      </tr>
      <tr>
        <td>myproject.mulesoft.library:common-error-library:jar:2.0.0-SNAPSHOT:compile 
        </td>
      </tr>
<tr>
        <td>myproject.mulesoft.notification:utility-common-domains:jar:3.0.0-SNAPSHOT:compile
        </td>
      </tr>
      <tr>
        <td>compile</td>
      </tr>
      <tr>
        <td>compile</td>
      </tr>
</table>
  </body>
  </html>

1 个答案:

答案 0 :(得分:0)

您只获得一个表行,因为您执行:

<xsl:for-each select="*">

来自/根节点的上下文,由:

建立
<xsl:template match="/">

/根节点只有一个子节点,即graphml根元素。

也许你想这样做:

<xsl:for-each select="*/*/*"> 

为每个node和/或edge

创建一行

另请注意:

<xsl:value-of select="/"/>

毫无意义。它将返回整个文档的整个文本。如果您将其更改为:

<xsl:value-of select="."/>

您将获得预期的结果 - 至少在给定的示例中。