2014-01-13 112 views
0

我一直在使用Google的方式嘗試執行下面的操作,並獲得一些命中,然而,沒有人爲我工作。XSLT - 檢查是否存在某些元素或節點

我有傳入的XML是2個XML中的任何一個。

<Session> 
     <SessionID>1231</SessionID> 
     <ClientID>556677</ClientID> 
</Session> 

<Session> 
     <SessionID>1231</SessionID> 
     <CompanyID>1060</CompanyID> 
</Session> 

基於上述中,XML可以非常從CompanyId到客戶端ID。我想改變自己的XML,但爲了做到這一點,我需要一個方式說:

如果我得到的ClientID,那麼只能得到價值和轉換XML,這樣是表示像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<Sessions xmlns="http://mysite/services/v1"> 
     <a:Session>1231</a:Session> 
     <a:Client>556677</a:Client> 
</Sessions> 

,如果我得到CompanyID,我變換以下

<?xml version="1.0" encoding="UTF-8"?> 
    <Sessions xmlns="http://mysite/services/v1"> 
      <a:Session>1231</a:Session> 
      <a:Company>1060</a:Company> 
    </Sessions> 

XML將配備兩種元素的ClientID或元素與CompanyID但不能同時....

我曾嘗試使用沒有成功如下:

<xsl:choose> 
<xsl:when test="/Session/ClientID"> 
<a:Client> 
<xsl:value-of select="a:Session/a:ClientId"/> 
    </a:Client> 
</xsl:choose> 

我希望能夠檢查是否與「客戶端ID」的元素是在XML,我可以從它的價值,並創建一個名爲「客戶」的元素.. 。同樣的情況,如果我與公司得到一個XML。

任何想法?謝謝您的幫助。

+1

你的結果是無效的:前綴 「一個」 未綁定到一個命名空間。 –

回答

0

請嘗試此模板。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="www.sample_namespace.com" 
    version="1.0"> 

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

<xsl:template match="Session"> 
    <xsl:element name="Sessions" namespace="http://mysite/services/v1"> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="SessionID"> 
    <a:Session><xsl:apply-templates/></a:Session> 
</xsl:template> 

<xsl:template match="ClientID"> 
    <a:Client><xsl:apply-templates/></a:Client> 
</xsl:template> 

<xsl:template match="CompanyID"> 
    <a:Company><xsl:apply-templates/></a:Company> 
</xsl:template> 

</xsl:stylesheet> 

當上述示例XML嘗試:

<Session> 
    <SessionID>1231</SessionID> 
    <CompanyID>1060</CompanyID> 
</Session> 

產生的結果爲:

<Sessions xmlns="http://mysite/services/v1"> 
    <a:Session xmlns:a="www.sample_namespace.com">1231</a:Session> 
    <a:Company xmlns:a="www.sample_namespace.com">1060</a:Company> 
</Sessions>