2011-02-09 75 views
1

我将使用xslt将docx文件转换为html。我的结果HTML包含像margin-top:NaN pt;风格,风格值NaN默认情况下在浏览器中被忽略。但我必须验证这些属性的存在,并在浏览器中查看之前必须删除...需要验证html样式

请帮我.. 。提前感谢...

+0

好问题,+1。查看我的答案,了解一般方法和具体示例。 :) – 2011-02-09 14:12:46

回答

0

您应该检查 '男' 以前加入内嵌样式。

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 
+0

+1好方法。我不认为测试数字函数的字符串值是好的... – 2011-02-09 16:49:22

+0

@Alejandro。我认为它对于传统语言开发者来说更​​具可读性。虽然我不坚持。 – Flack 2011-02-09 17:57:02

0

实在是太后期在生成的结果焯芬楠。

应该防止产生不必要的输出

下面是一个例子,也避免了产生的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>