2014-01-13 72 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>