2014-01-13 1 views
0

У меня были способы поиска по-русски, и я получаю несколько хитов, но никто не работает для меня.XSLT - Проверьте, существует ли какой-либо элемент или узлы

У меня есть входящие XML-файлы, которые являются либо двумя 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> 

The будет поставляться с любой из элементов ClientId или элемента CompanyID, но не как XML ....

Я попытался используйте следующий без успеха:

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

Я хочу, чтобы иметь возможность проверить, если элемент с «ClientID» находится на 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> 
Смежные вопросы