2012-07-31 74 views
1

我對XSLT不是很熟悉。根據If語句在字段中插入字符

基本上,我有我的原始XML項目的數組,它看起來像這樣:

樣品輸入文檔

<Items> 
    <Items>Item1</Items> 
    <Items>item2</Items> 
    <Items>Item3</Items> 
</Items> 

從樣品輸入預計輸出文檔

<Items> 
    <Items> 
     <Item1>Y</Item1>Item1</Items> 
    <Items> 
     <Item1 />item2</Items> 
    <Items> 
     <Item1 />Item3</Items> 
</Items> 

如何使用XSLT檢查每個Items並在修改後的XML中的字段內插入Y符號,或者如果找不到此項目,請將該字段留空。

我有這樣的事,現在這個權利,但我不知道這是這樣做

 <xsl:if test="Items='Item1'"> 
     <Item1>Y</Item1> 
     </xsl:if> 
     <xsl:if test="Items!='Item1'"> 
     <Item1></Item1> 
     </xsl:if> 
+0

你的目標不明確。請修改您的帖子以顯示所需的OUTPUT XML。 – 2012-07-31 22:01:28

回答

1

你不需要使用任何明確的條件XSLT指令的正確方法 - 模板和模板模式是你的朋友

<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="Items[not(*)]/text()[. = 'Item1']">Y</xsl:template> 

<xsl:template match="Items[not(*)]/text()" priority="0"/> 
</xsl:stylesheet> 

當這種變換所提供的XML文檔應用:

<Items> 
    <Items>Item1</Items> 
    <Items>item2</Items> 
    <Items>Item3</Items> 
</Items> 

有用,正確的結果產生

<Items> 
    <Items>Y</Items> 
    <Items/> 
    <Items/> 
</Items> 

說明

  1. identity rule COPIE爲它被選擇用於執行每個節點「作爲-is」。

  2. 有兩個壓倒一切的模板 - 一個爲Items一個文本子節點,其值是「項目1」(「代替」),第二個 - 爲Items任何其他文本節點的孩子 - 「刪除「這是由於它的空洞。

  3. 「刪除」模板的priority屬性設置爲低(爲零),以明確解決與「替換」模板的任何優先級衝突。