【问题标题】:XSL transformation of database results in XML数据库结果的 XSL 转换为 XML
【发布时间】:2013-03-19 02:29:07
【问题描述】:

我收到了来自 DB 查询结果的 XML 格式,需要应用 XSL 将 XML 转换为 HTML 表格格式。我是 XSLT 的新手,经过大量搜索,我似乎找不到与我的 XML 格式匹配的好示例。

我的 XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<B1j:jdbcQueryResult xmlns:B1j="http://ns.b1tech.com/2012/08/jdbc-query-result">
   <B1j:row>
      <B1j:col name="response_size" type="java.lang.Integer">128837</B1j:col>
      <B1j:col name="groupname" type="java.lang.String">AAA</B1j:col>
      <B1j:col name="count_total" type="java.lang.Integer">1</B1j:col>
      <B1j:col name="count_error" type="java.lang.Integer">0</B1j:col>
      <B1j:col name="timestamp" type="java.lang.Long">1363654726298</B1j:col>
      <B1j:col name="count_success" type="java.lang.Integer">1</B1j:col>
   </B1j:row>
   <B1j:row>
      <B1j:col name="response_size" type="java.lang.Integer">128837</B1j:col>
      <B1j:col name="groupname" type="java.lang.String">BBB</B1j:col>
      <B1j:col name="count_total" type="java.lang.Integer">1</B1j:col>
      <B1j:col name="count_error" type="java.lang.Integer">0</B1j:col>
      <B1j:col name="timestamp" type="java.lang.Long">1363654757598</B1j:col>
      <B1j:col name="count_success" type="java.lang.Integer">1</B1j:col>
   </B1j:row>
</B1j:jdbcQueryResult>

谁能帮助我了解我的 XSLT 模板应该是什么样子,以便从这个 XML 中精确列名和值并将其放入基本的 HTML 表中?

提前致谢!!

【问题讨论】:

    标签: xml database xslt transformation


    【解决方案1】:

    这是怎么回事:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:B1j="http://ns.b1tech.com/2012/08/jdbc-query-result"
                    exclude-result-prefixes="B1j"
                    >
      <xsl:output method="html" omit-xml-declaration="yes" />
    
      <xsl:template match="/*[B1j:row]">
        <table>
          <tr>
            <xsl:apply-templates select="B1j:row[1]/B1j:col" mode="header" />
          </tr>
    
          <xsl:apply-templates select="B1j:row" />
        </table>
      </xsl:template>
    
      <xsl:template match="B1j:col" mode="header">
        <th>
          <xsl:value-of select="@name"/>
        </th>
      </xsl:template>
    
      <xsl:template match="B1j:row">
        <tr>
          <xsl:apply-templates select="B1j:col" />
        </tr>
      </xsl:template>
    
      <xsl:template match="B1j:col">
        <td>
          <xsl:apply-templates />
        </td>
      </xsl:template>
    </xsl:stylesheet>
    

    在您的示例输入上运行时,会产生:

    <table>
      <tr>
        <th>response_size</th>
        <th>groupname</th>
        <th>count_total</th>
        <th>count_error</th>
        <th>timestamp</th>
        <th>count_success</th>
      </tr>
      <tr>
        <td>128837</td>
        <td>AAA</td>
        <td>1</td>
        <td>0</td>
        <td>1363654726298</td>
        <td>1</td>
      </tr>
      <tr>
        <td>128837</td>
        <td>BBB</td>
        <td>1</td>
        <td>0</td>
        <td>1363654757598</td>
        <td>1</td>
      </tr>
    </table>
    

    【讨论】:

    • 当然可以。但我希望你能做出一些努力来理解它为什么起作用。 StackOverflow 永远不应该简化为“我懒得读一本关于语言的书,有人可以帮我写代码吗?”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2016-02-12
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    相关资源
    最近更新 更多