2011-02-09 14 views
1

私はdocxファイルをxsltを使ってhtmlに変換しています。結果のHTMLにはmargin-top:NaN pt;のようなスタイルが含まれていますが、スタイル値NaNはデフォルトではブラウザで無視されますが、このような属性が存在するかどうかを検証してブラウザで表示する前に削除する必要があります...htmlスタイルを検証する必要があります

私を助けてください。事前にお気軽に。

+0

良い質問、+1。一般的なアプローチと具体的な例については私の答えを見てください。 :) –

答えて

0

をあなたは 'NaNの' の前には、インラインを追加することを確認する必要がありますスタイル。

など。その後のことができます

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

:このXMLを検討

<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良いアプローチ。数値関数の文字列値をテストするのは良いとは思わない... –

+0

@Alejandro。従来の言語を使用する開発者にとっては読みやすいと思います。私は主張しないが。 – Flack

0

生成された結果ではNaNためCHACKには余りにも後半です。

不要な出力を生成するのを防ぐ必要があります。!この変換は、以下のXML文書に適用され

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

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

のみ正しい出力(NOのNaN)である。ここで

はNaNに生成回避例えば、あります生成された

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

+1 XPath 1.0の「数のインスタンス」表現が改善されました。 –

関連する問題