對于我正在從事的專案,我創建了一個效果很好的樣式表。
來自社區的很多幫助,謝謝!
現在我試圖僅在存在特定節點時創建文本輸出。
例如,一些土壤層資料為 xml:
<NODE1 Name="Well_1" Version="1 ">
<LAYERS>
<LAYER>
<DEPTHTO>1.00</DEPTHTO>
<INTV>0</INTV>
<INDEX_ZONE>-1</INDEX_ZONE>
<REC_CARB_MRKR>2</REC_CARB_MRKR>
</LAYER>
<LAYER>
<DEPTHTO>2.00</DEPTHTO>
<INTV>0</INTV>
<INDEX_ZONE>-1</INDEX_ZONE>
</LAYER>
<LAYER>
<DEPTHTO>3.00</DEPTHTO>
<INTV>0</INTV>
<INDEX_ZONE>-1</INDEX_ZONE>
<REC_CARB_MRKR>2</REC_CARB_MRKR>
</LAYER>
</LAYERS>
</NODE1>
并且有了那個 xslt (MSXML 6; xslt1),不要打擾一些功能,它是一個摘錄:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes=" xml xsl xs">
<xsl:output method="text" version="1.0" indent="yes" />
<xsl:template name="REC" match="/*">
<xsl:apply-templates select="." mode="WELLCURVE"/>
</xsl:template>
<xsl:template name="WELLCURVE" match="/*" mode="WELLCURVE">
<xsl:text>SOME 
</xsl:text>
<xsl:text>TEXT 
</xsl:text>
<xsl:text>Options 
</xsl:text>
<xsl:for-each select="LAYERS/LAYER">
<xsl:variable name="INTVID" select="INTV"/>
<xsl:variable name="precedingMRKR" select="preceding-sibling::LAYER[INTV = $INTVID][1]"/>
<xsl:variable name="DEPTHFROM" select="$precedingMRKR/DEPTHTO"/>
<xsl:if test="INTV=0">
<xsl:if test="REC_CARB_MRKR != ''">
<xsl:choose>
<xsl:when test="$precedingMRKR">
<xsl:variable name="Layer_mid" select="format-number(((DEPTHTO $DEPTHFROM) div 2), '0.##')" />
<xsl:text>REC </xsl:text>
<xsl:value-of select="concat($Layer_mid,' ', REC_CARB_MRKR)" />
<xsl:text>
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="Layer_mid" select="format-number((DEPTHTO div 2), '0.##')" />
<xsl:text>REC </xsl:text>
<xsl:value-of select="concat($Layer_mid,' ', REC_CARB_MRKR)" />
<xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:if>
</xsl:for-each>
<xsl:text>END_CURVE 
</xsl:text>
<xsl:text>END</xsl:text>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
我明白了 :
SOME
TEXT
Options
REC 0.5 2
REC 2.5 2
END_CURVE
END
如您所見,無論資料是否存在(REC_CARB_MRKR 節點),始終存在“某些文本選項”。
所以我想實作一些例程,檢查任何節點“層”中是否存在節點“REC_CARB_MRKR”,如果存在,則需要“SOME TEXT Option”,也需要“END CURVE”。目前,它對于一些沒有資料的 LAYER 非常有用。但是當沒有 LAYER 包含 REC_CARB_MKRK 時輸出無用并且看起來像:
SOME
TEXT
Options
END_CURVE
END
在這種情況下,可以忽略整個 xslt 塊,因為不存在資料。
任何想法,如何實作?
謝謝
uj5u.com熱心網友回復:
這是一種可能性:
<xsl:variable name="flagREC_CARB_MRKR" select="boolean(LAYERS/LAYER/REC_CARB_MRKR[1])"/>
<xsl:if test="$flagREC_CARB_MRKR">
<xsl:text>SOME 
</xsl:text>
<xsl:text>TEXT 
</xsl:text>
<xsl:text>Options 
</xsl:text>
</xsl:if>
你也可以這樣做:
<xsl:if test="$flagREC_CARB_MRKR">
<xsl:text>END_CURVE 
</xsl:text>
<xsl:text>END</xsl:text>
<xsl:text>
</xsl:text>
</xsl:if>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/492129.html
上一篇:滿足條件時的XSL變數標記名稱
下一篇:SQLXML自動輸出到檔案中
