XSL 101 - Как создать базовую таблицу стилей XSL для данного XML-документа? - PullRequest
2 голосов
/ 25 марта 2009

Ниже приведен фрагмент того, что вы получаете, когда вы сохраняете конфигурацию веб-сайтов 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>

Как видите, между элементами <MBProperty> и </MBProperty> есть несколько <IIsWebServer> секций.

Я хотел бы создать простую таблицу стилей xsl, которая выводит многостолбцовый (табличный) результат, содержащий следующие атрибуты для каждого экземпляра IIsWebServer:

ServerComment
ServerBindings
AuthFlags

Таким образом, результат может выглядеть примерно так:

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

и так далее ...

Спасибо!

Ответы [ 2 ]

3 голосов
/ 25 марта 2009

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>

Конечно, вам захочется сделать это еще раз :-), но в принципе это работает.

Будь то правильный выбор и лучшая технология для этого, зависит только от вас :-) Но это можно сделать - нет проблем.

Марк

0 голосов
/ 25 марта 2009

Как сказал Эмиль, 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>

Если вы собираетесь разрабатывать табличный дисплей только для просмотра, это может быть вашим лучшим выбором. Однако, если вы планируете использовать данные по-другому, возможно, лучше использовать подход Марка или Эмиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...