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

时间:2022-07-05 14:16:57

I have a XHTML Template. I want to convert dynamically the xhtml file to xslt . Waht is the best way to do this? Below written the XHTML content

我有一个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 个解决方案

#1


2  

I don't know precisely the semantics of the macros used in your XHTML file, but the following transformation produces an XSLT stylesheet which is hopefully equivalent, and if not, should be easily tailored to your needs:

我不确切知道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>

#2


0  

Did you consider using XProc and <p:template> ?

你考虑过使用XProc和

吗?

:template>

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

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

#1


2  

I don't know precisely the semantics of the macros used in your XHTML file, but the following transformation produces an XSLT stylesheet which is hopefully equivalent, and if not, should be easily tailored to your needs:

我不确切知道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>

#2


0  

Did you consider using XProc and <p:template> ?

你考虑过使用XProc和

吗?

:template>

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

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