代码之家  ›  专栏  ›  技术社区  ›  Matthew

XSL 101-如何为给定的XML文档生成基本XSL样式表?

  •  2
  • Matthew  · 技术社区  · 17 年前

    以下是将IIS 6/Windows Server 2003网站的配置保存到文件中时得到的信息片段:

    <?xml version ="1.0"?>
    <configuration xmlns="urn:microsoft-catalog:XML_Metabase_V64_0">
    <MBProperty>
    <IIsWebServer   Location ="/LM/W3SVC/1"
            AppPoolId="DefaultAppPool"
            DefaultDoc="Default.htm,Default.asp,index.htm,iisstart.htm,Default.aspx"
        ServerAutoStart="FALSE"
        ServerBindings=":80:"
        ServerComment="Default Web Site"
        ServerSize="1"
    >
    </IIsWebServer>
    <IIsWebServer   Location ="/LM/W3SVC/1020944513"
        AuthFlags="0"
        LogPluginClsid="{FF160663-DE82-11CF-BC0A-00AA006111E0}"
        ServerAutoStart="TRUE"
        ServerBindings="161.230.8.183:80:"
        ServerComment="staging.magazinefundraising.com"
    >
    </IIsWebServer>
    <IIsWebServer   Location ="/LM/W3SVC/103632312"
        AuthFlags="0"
        LogPluginClsid="{FF160663-DE82-11CF-BC0A-00AA006111E0}"
        ServerAutoStart="TRUE"
        ServerBindings="161.230.9.48:80:"
        ServerComment="QSP2.Downtime"
    >
    </IIsWebServer>
    </MBProperty>
    </configuration>
    

    <IIsWebServer> 之间的部分 <MBProperty> </MBProperty> 元素。

    我想创建一个简单的xsl样式表,它输出一个多列(表格)结果,其中包含每个IIsWebServer实例的以下属性:

    ServerComment
    ServerBindings
    AuthFlags
    

    因此,结果可能类似于:

    ServerComment     ServerBindings     AuthFlags  
    -------------     --------------     ---------  
    QSP2.Downtime     161.230.9.48:80:   0  
    

    谢谢

    2 回复  |  直到 17 年前
        1
  •  3
  •   marc_s MisterSmith    17 年前

    XSL可以是这样的:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt"
        xmlns:mb="urn:microsoft-catalog:XML_Metabase_V64_0"
        exclude-result-prefixes="msxsl">
        <xsl:output method="text" indent="yes"/>
    
        <xsl:template match="/">
          ServerComment&#160;&#160;&#160;ServerBindings&#160;&#160;&#160;AuthFlags
    
          <xsl:apply-templates />
        </xsl:template>
    
      <xsl:template match="mb:IIsWebServer">
    
        <xsl:value-of select="./@ServerComment" />
        <xsl:text>&#160;</xsl:text>
        <xsl:value-of select="./@ServerBindings" />
        <xsl:text>&#160;</xsl:text>
        <xsl:value-of select="./@AuthFlags" />
    
      </xsl:template>
    </xsl:stylesheet>
    

    当然,你会想美化它:-)但它基本上是有效的。

    这是否是正确的选择和最好的技术,完全取决于您:-)但这是可以做到的-没问题。

        2
  •  -1
  •   cmptrgeekken    17 年前

    正如Emil所说,XSL并不是专门为 文本 格式化。然而,如果输出HTML,您应该能够实现您的目标。如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
    <table>
        <tr>
            <th>ServerComment</th>
            <th>ServerBindings</th>
            <th>AuthFlags</th>
        </tr>
            <xsl:for-each select="/configuration/MBProperty/IIsWebServer">
        <tr>
            <td><xsl:value-of select="@ServerComment" /></td>
            <td><xsl:value-of select="@ServerBindings" /></td>
            <td><xsl:value-of select="@AuthFlags" /></td>
        </tr>
            </xsl:for-each>
    </table>
        </xsl:template>
    </xsl:stylesheet>
    

    如果您打算开发一个仅用于查看目的的表格显示,这可能是您的最佳选择。然而,如果你打算以另一种方式使用数据,那么最好采用Marc或Emil的方法。