2009-11-23 45 views
4

我有一個xml文件,其中有標籤,即<性別/ >它攜帶'M'或'F'作爲數據,現在我的工作是測試該值並根據值M或<Gender_Tag>Male</Gender_Tag><Gender_Tag>Female</Gender_Tag> ˚F分別..我想這段代碼。它用在其他情況下工作..XSLT:如何處理測試元素的值?

+1

格式化建議:在不使用'>'或'&lt'的情況下,按原樣編寫XML,然後使用markdown將其格式化爲代碼。 – Konamiman 2009-11-23 09:00:13

+2

請使用代碼塊(內聯或者塊狀)以獲得更好的可讀性 – Scoregraphic 2009-11-23 09:00:32

+1

upvote用於共享使用XLST的痛苦 – 2009-11-23 09:03:40

回答

12

在模板中表達的所有相對路徑都是針對當前節點進行評估的。您的模板符合性別元素,因此性別='M'如果有任何性別的孩子名爲'性別'且值爲'M',則返回true。我想這是不是這樣的......

使用點來表示當前節點(這裏是兩性元素):

<xsl:template match="root/details/Gender"> 
    <Gender_Tag> 
    <xsl:choose> 
     <xsl:when test=".='M'"> 
     <xsl:text>Male</xsl:text> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:text>Female</xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
    </Gender_Tag> 
</xsl:template> 

編輯:您可以使用兩個模板太

<xsl:template match="root/details/Gender[.='M']"> 
    <Gender_Tag>Male</Gender_Tag> 
</xsl:template> 
<xsl:template match="root/details/Gender[.='F']"> 
    <Gender_Tag>Female</Gender_Tag> 
</xsl:template> 
+0

它的工作夥計..非常非常感謝你..................... – 2009-11-23 09:29:54

5

未經測試,但可能工作...

<xsl:template match="root/details/Gender"> 
    <xsl:if test="text()='M'"> 
    <Gender_Tag>Male</Gender_Tag> 
    </xsl:if> 
    <xsl:if test="text()='F'"> 
    <Gender_Tag>Female</Gender_Tag> 
    </xsl:if> 
</xsl:template> 
+0

它不工作..我只得到一個空間在那個地方介紹..如果我嘗試測試屬性值..我可以很容易地做到這一點..但我不知道是什麼問題與比較價值元素.. – 2009-11-23 09:11:22

+0

您需要添加您嘗試解析的XML樣本。 – Murph 2009-11-23 09:14:52

+0

Thanx的建議.. – 2009-11-23 09:34:39

5
<xsl:template match="root/details/Gender"> 
    <xsl:choose> 
     <xsl:when test="normalize-space(text())='M'"> 
      <Gender_Tag>Male</Gender_Tag> 
     </xsl:when> 
     <xsl:otherwise> 
      <Gender_Tag>Female</Gender_Tag> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

我的例子不同之處,從Scoregraphic的兩點:

  1. 它使用XSL:選擇保證,只有一個Gender_Tag元素創建(這也意味着,如果文字是不是「M」,它始終是一個女)

  2. 使用normalize-space()條元素文本內容周圍的空白區域。

+0

'文本()'不能是F和M的共同點,但使用''很好 – Scoregraphic 2009-11-23 09:21:11

+0

感謝您的信息性建議.. :) – 2009-11-23 09:33:45

2

沒有看到XML它很難肯定,但我認爲你的樣品XSLT應該是:

<xsl:template match="root/details/Gender">  
    <xsl:if test=".='M'"> 
     <Gender_Tag><xsl:text>Male</xsl:text></Gender_Tag> 
    </xsl:if> 
    <xsl:if test=".='F'"> 
     <Gender_Tag><xsl:text>Female</xsl:text></Gender_Tag> 
    </xsl:if> 
</xsl:template> 

使用選擇按另一種答案會更好(雖然我認爲它應該是兩個顯式時間子句而不是時間和其他)

+0

感謝您的建議.. – 2009-11-23 09:32:47