我需要帮助格式化xml文件,并被要求创建一个xslt文件

时间:2017-11-10 15:11:34

标签: xml xslt xslt-1.0

我需要帮助格式化XML文件,并且要求创建一个XSLT文件以便在浏览器中看到它并不一定非常花哨。我已经创建了XML代码,并且我有一个示例XSLT文件,并且我认为我可以替换我的任务的值但是无法显示任何内容。任何帮助将不胜感激。

我不确定我做错了什么。

这是我的任务的XSLT文件。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
    <xsl:for-each select="/SEASON/PLAYER">
      <div style="background-color:teal;color:white;padding:6px">
        <span style="font-weight:bold"><xsl:value-of select="LEAGUE_NAME"/> League- </span>
      </div>
      <div style="background-color:teal;color:white;padding:4px">
        <span style="font-weight:bold"><xsl:value-of select="DIVISION_NAME"/> Division- </span>
      </div>
      <div style="margin-left:22px;margin-bottom:1em;font-size:12pt">
        <p>
          <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
            <span style="font-weight:bold"><xsl:value-of select="Team_NAME"/> Team- </span>
          </div>
          <span style="font-style:italic"> (<xsl:value-of select="GIVEN_NAME/SURNAME"/>PLayer Name)</span>
        </p>
      </div>
    </xsl:for-each>
  </body>

  </html>

这是我的分配的xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Season.xslt" ?>
  <SEASON>
    <YEAR>1998</YEAR>
    <LEAGUE>
      <LEAGUE_NAME>National</LEAGUE_NAME>
      <DIVISION>
        <DIVISION_NAME>East</DIVISION_NAME>
        <TEAM>
          <TEAM_CITY>Florida</TEAM_CITY>
          <TEAM_NAME>Marlins</TEAM_NAME>
          <PLAYER>
            <GIVEN_NAME>Eric</GIVEN_NAME>
            <SURNAME>Ludwick</SURNAME>
            <POSITION>Starting Pitcher</POSITION>
            <GAMES>13</GAMES>
            <GAMES_STARTED>6</GAMES_STARTED>
            <WINS>1</WINS>
            <LOSSES>4</LOSSES>
            <SAVES>0</SAVES>
            <COMPLETE_GAMES>0</COMPLETE_GAMES>
            <SHUT_OUTS>0</SHUT_OUTS>
            <ERA>7.44</ERA>
            <INNINGS>32.2</INNINGS>
            <EARNED_RUNS>31</EARNED_RUNS>
            <HIT_BATTER>27</HIT_BATTER>
            <WILD_PITCHES>0</WILD_PITCHES>
            <BALK>2</BALK>
            <WALKED_BATTER>0</WALKED_BATTER>
            <STRUCK_OUT_BATTER>17</STRUCK_OUT_BATTER>
          </PLAYER>
          <PLAYER>
            <GIVEN_NAME>Brian</GIVEN_NAME>
            <SURNAME>Daubach</SURNAME>
            <POSITION>First Base</POSITION>
            <GAMES>10</GAMES>
            <GAMES_STARTED>3</GAMES_STARTED>
            <AT_BATS>15</AT_BATS>
            <RUNS>0</RUNS>
            <HITS>3</HITS>
            <DOUBLES>1</DOUBLES>
            <TRIPLES>0</TRIPLES>
            <HOME_RUNS>0</HOME_RUNS>
            <RBI>3</RBI>
            <STEALS>0</STEALS>
            <CAUGHT_STEALING>0</CAUGHT_STEALING>
            <SACRIFICE_HITS>0</SACRIFICE_HITS>
            <SACRIFICE_FLIES>0</SACRIFICE_FLIES>
            <ERRORS>0</ERRORS>
            <WALKS>1</WALKS>
            <STRUCK_OUT>5</STRUCK_OUT>
            <HIT_BY_PITCH>1</HIT_BY_PITCH>
          </PLAYER>
        </TEAM>
        <TEAM>
          <TEAM_CITY>Montreal</TEAM_CITY>
          <TEAM_NAME>Expos</TEAM_NAME>
        </TEAM>
        <TEAM>
          <TEAM_CITY>New York</TEAM_CITY>
          <TEAM_NAME>Mets</TEAM_NAME>
        </TEAM>
        <TEAM>
          <TEAM_CITY>Philadelphia</TEAM_CITY>
          <TEAM_NAME>Phillies</TEAM_NAME>
        </TEAM>
      </DIVISION>
      <DIVISION>
        <DIVISION_NAME>Central</DIVISION_NAME>
        <TEAM>
          <TEAM_CITY>Chicago</TEAM_CITY>
          <TEAM_NAME>Cubs</TEAM_NAME>
        </TEAM>
      </DIVISION>
      <DIVISION>
        <DIVISION_NAME>West</DIVISION_NAME>
        <TEAM>
          <TEAM_CITY>Arizona</TEAM_CITY>
          <TEAM_NAME>Diamondbacks</TEAM_NAME>
        </TEAM>
      </DIVISION>
    </LEAGUE>
    <LEAGUE>
      <LEAGUE_NAME>American</LEAGUE_NAME>
      <DIVISION>
        <DIVISION_NAME>East</DIVISION_NAME>
        <TEAM>
          <TEAM_CITY>Baltimore</TEAM_CITY>
          <TEAM_NAME>Orioles</TEAM_NAME>
        </TEAM>
      </DIVISION>
      <DIVISION>
        <DIVISION_NAME>Central</DIVISION_NAME>
        <TEAM>
          <TEAM_CITY>Chicago</TEAM_CITY>
          <TEAM_NAME>White Sox</TEAM_NAME>
        </TEAM>
      </DIVISION>
      <DIVISION>
        <DIVISION_NAME>West</DIVISION_NAME>
        <TEAM>
          <TEAM_CITY>Anaheim</TEAM_CITY>
          <TEAM_NAME>Angels</TEAM_NAME>
        </TEAM>
      </DIVISION>
    </LEAGUE>
  </SEASON>

我试图让它看起来与我的其他任务相似

这是我用于早餐XML文件的示例XSLT文件。

<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
  <xsl:for-each select="breakfast_menu/food">
    <div style="background-color:teal;color:white;padding:4px">
      <span style="font-weight:bold"><xsl:value-of select="name"/> - </span>
      <xsl:value-of select="price" />
    </div>
    <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
      <p>
        <xsl:value-of select="description" />
        <span style="font-style:italic"> (<xsl:value-of select="calories"/> calories per serving)</span>
      </p>
    </div>
  </xsl:for-each>
</body>

</html>

1 个答案:

答案 0 :(得分:0)

你开始这样做......

ResultSet rs = metaData.getTables(null, null, "mytable".toUpperCase(), null);

但是这将寻找一个名为<xsl:for-each select="/SEASON/PLAYER"> 的元素,它是PLAYER的直接子元素。但是SEASON元素嵌套在PLAYERLEAGUEDIVISION中,因此您的TEAM应该看起来像这样

xsl:for-each

但是,在此之内你就可以做到这一点..

<xsl:for-each select="/SEASON/LEAGUE/DIVISION/TEAM/PLAYER">

这是一个问题,现在位于<xsl:value-of select="LEAGUE_NAME"/> 元素上,因此它会查找名为PLAYER的直接子项,但没有。您需要导航回树以获得联盟名称

LEAGUE_NAME

<xsl:value-of select="../../../LEAGUE_NAME"/> 获取父节点的地方)

试试这个XSLT ......

..
但是,也许你真的想避免重复联赛,分区和球队?在这种情况下,您可以嵌套<xsl:for-each select="/SEASON/LEAGUE/DIVISION/TEAM/PLAYER"> <div style="background-color:teal;color:white;padding:6px"> <span style="font-weight:bold"><xsl:value-of select="../../../LEAGUE_NAME"/> League- </span> </div> <div style="background-color:teal;color:white;padding:4px"> <span style="font-weight:bold"><xsl:value-of select="../../DIVISION_NAME"/> Division- </span> </div> <div style="margin-left:22px;margin-bottom:1em;font-size:12pt"> <p> <div style="margin-left:20px;margin-bottom:1em;font-size:10pt"> <span style="font-weight:bold"><xsl:value-of select="../TEAM_NAME"/> Team- </span> </div> <span style="font-style:italic"> (<xsl:value-of select="concat(GIVEN_NAME, ' ', SURNAME)"/>)</span> </p> </div> </xsl:for-each> 语句

xsl:for-each

请注意条件<xsl:for-each select="/SEASON/LEAGUE[.//PLAYER]"> <div style="background-color:teal;color:white;padding:6px"> <span style="font-weight:bold"><xsl:value-of select="LEAGUE_NAME"/> League- </span> </div> <xsl:for-each select="DIVISION[.//PLAYER]"> <div style="background-color:teal;color:white;padding:4px"> <span style="font-weight:bold"><xsl:value-of select="DIVISION_NAME"/> Division- </span> </div> <div style="margin-left:22px;margin-bottom:1em;font-size:12pt"> <p> <xsl:for-each select="TEAM[PLAYER]"> <div style="margin-left:20px;margin-bottom:1em;font-size:10pt"> <span style="font-weight:bold"><xsl:value-of select="TEAM_NAME"/> Team- </span> </div> <xsl:for-each select="PLAYER"> <span style="font-style:italic"> (<xsl:value-of select="concat(GIVEN_NAME, ' ', SURNAME)"/>)</span> </xsl:for-each> </xsl:for-each> </p> </div> </xsl:for-each> </xsl:for-each> 的使用,以便仅在至少有一个玩家作为后代时输出[.//PLAYER]等元素。