HTML格式化xml元素中的文本

时间:2013-04-24 09:44:49

标签: html xml xslt

我目前正在使用XSLT样式表格式化我的xml。它看起来像这样的东西

<xsl:for-each select="Talents">
    <div style="font-family:Calibri, Arial; font-size:5pt; cursor: default;">
<xsl:if test="Talent != ''">
    <table border="0" width="650">
        <tr>
            <td style="padding-left: 15px;" bgcolor="#A0A0A0" width="80%">

            <b id="toggle"><xsl:value-of select="Talent"/></b></td>

            <td bgcolor="#A0A0A0" width="20%" align="center">
                <xsl:value-of select="TCost"/>
                <xsl:text>  -  </xsl:text>
                <xsl:value-of select="Type"/>
            </td>
         </tr>
    </table>
// etc

因此将XML元素格式化为一个漂亮的结构化表格相当容易。我想知道如果可能的话,你可以格式化这些元素中的实际文本。

例如,你不知道元素Tyep中的内容,但是你可以在其中使用html elemtns,这样如果你在文本周围看到 它会使它变为粗体等吗?

所以我的问题是你可以使用xml元素html格式化文本吗?

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="style.xsl" type="text/xsl"?>
<Collection>
     <Talents>
     <Talent>Smiling</Talent>
     <TCost>1</TCost>
     <Type>ANY king of smile will do but the fake ones are the bed</Type>
     </Talents>

我所看到的是,是否可以使用粗体等html格式强调不同的文字颜色?如果是这样我该如何执行此操作,以便当我打开我的xml时,它使用我的style.xsl设置样式,然后xml元素中的文本也具有html格式。

1 个答案:

答案 0 :(得分:0)

我试图创建一个有效的例子,希望能回答你的问题:

要复制包含xlm或html标签的内容,您必须使用xslt文件的“身份转换模板”。

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

xsl:value-of更改为apply-templates。 (只是你喜欢整个孩子树的副本)。

xsl将如下所示:       

<xsl:template match="/*">
    <xsl:apply-templates select="Collection" />
</xsl:template>
<xsl:template match="Collection">
    <xsl:for-each select="Talents">
        <div style="font-family:Calibri, Arial; font-size:5pt; cursor: default;">
            <xsl:if test="Talent != ''">
                <table border="0" width="650">
                    <tr>
                        <td style="padding-left: 15px;" bgcolor="#A0A0A0" width="80%">

                            <b id="toggle">
                                <xsl:value-of select="Talent"/>
                            </b>
                        </td>

                        <td bgcolor="#A0A0A0" width="20%" align="center">
                            <xsl:value-of select="TCost"/>
                            <xsl:text>  -  </xsl:text>
                            <xsl:apply-templates select="Type/node()"/>
                        </td>
                    </tr>
                </table>
            </xsl:if>
        </div>
    </xsl:for-each>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

现在您可以将html添加到Type标记中。有了这个输入:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
    <Collection>
        <Talents>
            <Talent>Smiling</Talent>
            <TCost>1</TCost>
            <Type>ANY <b>king</b> of smile will do but the fake ones are the bed</Type>
        </Talents>
    </Collection>
<xml>

它将生成此输出:

<div style="font-family: Calibri, Arial; font-size: 5pt; cursor: default;">

        <table border="0" width="650">
            <tr>
                <td style="padding-left: 15px;" bgcolor="#A0A0A0" width="80%">
                    <b id="toggle">Smiling</b>
                </td>
                <td bgcolor="#A0A0A0" width="20%" align="center">
                    1 - ANY <b>king</b> of smile will do but the fake ones are the bed
                </td>
            </tr>
        </table>
    </div>