2011-11-08 55 views
-3

我正在使用XSLT來實現它的目的,即將1 xml格式映射到另一個格式。AddExtensionObject灰泥遍佈我的XML

由於M $缺少對2.0的支持以及隨附的所有可愛功能(無需比較任何人的比較情況?我希望有人因丟失1.0而失去了工作)以及更多我期望使用AddExtensionObject添加一些功能來添加我需要的支持。我相信這比讓腳本運行更安全。

煩惱是我所有標籤上的骨灰盒的石膏。例如。

<INVAC xmlns:myColor="urn:myColor"> 
<MEMBO>7131</MEMBO> 
<FUNDNAME>Fund00b</FUNDNAME> 
</INVAC> 
當我跟隨 http://www.15seconds.com/issue/031112.htm

我想使用額外的功能,但不具備輸出修改後的版本

.......

在此先感謝!

+0

嗯,它似乎增加了以下襬脫這個實例'exclude-result-prefixes =「myColor」' –

+0

我可以建議閱讀一本關於XSLT的好書,將顯着增強你理解至少最基本的XSLT概念? –

回答

1

您已經找到了主要問題的答案 - xsl:stylesheetexclude-result-prefixes屬性應該用於指定我們不希望在文字結果上覆制的所有名稱空間前綴(以空格分隔的列表)元素。

您的其他問題也很容易回答:

的情況下,比較少人?

使用

translate($s1, $vUpper, $vLower) 
= 
translate($s2, $vUpper, $vLower) 

該評估爲true()什麼時候兩個字符串$s1$s2 ARA不區分大小寫的,平等的。

變量$vUpper應包含字母表的所有大寫字母,而變量$vLower應包含字母表的所有小寫字母。

下面是一個完整的例子

<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:param name="pNameOfElementsToDelete" select="'DeLetE'"/> 

<xsl:variable name="vUpper" select= 
"'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> 

<xsl:variable name="vLower" select= 
"'abcdefghijklmnopqrstuvwxyz'"/> 

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

<xsl:template match="*[true()]"> 
    <xsl:if test= 
    "not(
    translate(name(), $vUpper, $vLower) 
    = 
    translate($pNameOfElementsToDelete, $vUpper, $vLower) 
    ) 
"> 
    <xsl:call-template name="identity"/> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

當此XML文檔上施加:

<a> 
<b> 
    <Delete/> 
</b> 
<dell/> 
<c> 
    <deLete/> 
</c> 
</a> 

這種轉變產生一個新的XML文檔中的任何元件,其名稱對於"DeLetE"等於不區分大小寫:

<a> 
    <b/> 
    <dell/> 
    <c/> 
</a>