需要验证html样式

时间:2011-02-09 10:33:16

标签: html xslt

我正在使用xslt将docx文件转换为html。我生成的html包含margin-top:NaN pt;等样式,默认情况下在浏览器中忽略样式值NaN。但我必须验证是否存在此类属性,并且必须在浏览器中查看之前删除... < / p>

请帮助我...提前致谢...

3 个答案:

答案 0 :(得分:1)

您是否尝试过W3C CSS验证器?

由于SOAP Web服务,您可以以编程方式使用它:

答案 1 :(得分:0)

您应该在添加内联样式之前检查“NaN”

E.g。考虑这个XML:

<?xml version="1.0"?>
<t>
    <Number>adsfdasf</Number>
    <Number></Number>
    <Number>100</Number>
    <Number>1.234234</Number>
</t>

然后你可以:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="Number">
        <xsl:value-of select="concat(., ' : ')"/>
        <xsl:if test="not(string(number()) = 'NaN')">valid</xsl:if>
        <xsl:if test="string(number()) = 'NaN'">invalid</xsl:if>
        <xsl:text>&#xa;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

结果:

adsfdasf : invalid
 : invalid
100 : valid
1.234234 : valid

答案 2 :(得分:0)

在生成的结果中查找NaN为时已晚。

应该阻止产生不需要的输出

这是一个避免生成NaN的例子:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="num[number(.) = number(.)]">
  <span style="margin-top:{.}"/>
 </xsl:template>

 <xsl:template match="num[not(number(.) = number(.))]"/>
</xsl:stylesheet>

将此转换应用于以下XML文档

<t>
    <num>helo</num>
    <num></num>
    <num>100</num>
    <num>1.234234</num>
</t>

仅产生正确的输出(无NaN)

<t>
   <span style="margin-top:100"/>
   <span style="margin-top:1.234234"/>
</t>