我一直在谷歌上搜索下面的方法,我得到了一些点击,不过,没有人为我工作。
我有传入的XML,它们是2个XML中的任何一个。
<Session>
<SessionID>1231</SessionID>
<ClientID>556677</ClientID>
</Session>
或
<Session>
<SessionID>1231</SessionID>
<CompanyID>1060</CompanyID>
</Session>
基于以上所述,XML可以从CompanyId到ClientId。我想转换他的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>
我希望能够检查XML上是否包含“ClientID”的元素,我可以从中获取值并创建一个名为“Client”的元素...如果我使用公司获取XML,则会出现相同的情况。
有什么想法吗?谢谢您的帮助。
答案 0 :(得分: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>