2011-02-09 66 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>