从xhtml动态创建xslt的最佳方法是什么?

时间:2013-01-29 09:44:22

标签: asp.net xslt xhtml

我有一个XHTML模板。我想动态地将xhtml文件转换为xslt。 Waht是最好的方法吗? 下面写了XHTML内容

<div>
{:header:}
<br />
{:date:}
<p>
{:mailingattn:} <br />
{:facilityname:} <br />
{:facilitystreet:} <br />
{:facilitystreet2:} <br />
{:facilitycity:}, {:facilitystate:}  {:facilityzip:} <br />
{:facilitycountry:}
</p>

<p>
{:message:}
</p>

<p>
Sincerely,<br />
{:signature:}
</p>
{:footer:}
</div>

2 个答案:

答案 0 :(得分:2)

我不确切知道XHTML文件中使用的宏的语义,但是下面的转换产生了一个希望等效的XSLT样式表,如果没有,应该可以根据您的需要轻松定制:

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

    <xsl:template match="*">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/">
        <xsl:element name="xsl:stylesheet">
            <xsl:attribute name="version" select="'2.0'"/>
            <xsl:element name="xsl:template">
                <xsl:attribute name="match" select="'/*'"/>
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="text()">
        <xsl:variable name="regex">\{:([a-zA-Z0-9]*):\}</xsl:variable>
        <xsl:analyze-string select="." regex="{$regex}">
            <xsl:matching-substring>
                <xsl:element name="xsl:value-of">
                    <xsl:attribute name="select" select="regex-group(1)"/>
                </xsl:element>
            </xsl:matching-substring>
            <xsl:non-matching-substring>
                <xsl:value-of select="."/>
            </xsl:non-matching-substring>
        </xsl:analyze-string>
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

您是否考虑使用XProc和&lt; p:template&gt; ?

http://www.w3.org/TR/xproc-template/#c.template