2015-01-07 5 views
0

Я только начал использовать XSLT и я не могу приступить к созданию очень простой XSL Вот моя проблема: У меня есть основной XML-файл:XSLT основной - Неправильное преобразование

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <InvokeLIREVOIE xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDateTime="2015-01-05T18:12:58+01:00" transLanguage="FR" baseLanguage="FR" messageID="1420477955208836965" maximoVersion="7 5 20140411-2000 V7511--1"> 
      <LIREVOIESet> 
       <VOIE> 
       <CODE_CATEGORIE></CODE_CATEGORIE> 
       <CODE_COMMUNE>203</CODE_COMMUNE> 
       <CODE_COMMUNE_ASSAIN></CODE_COMMUNE_ASSAIN> 
       <CODE_COMMUNE_ASSAIN_INSEE></CODE_COMMUNE_ASSAIN_INSEE> 
       <CODE_LIVRE></CODE_LIVRE> 
       <CODE_VOIE>2985</CODE_VOIE> 
       <COORDX></COORDX> 
       <COORDY></COORDY> 
       ... (more useless elements) 
       </VOIE> 
      </LIREVOIESet> 
     </InvokeLIREVOIE> 
    </soapenv:Body> 
</soapenv:Envelope> 

выход после преобразования должен быть:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:v01="http://host/WebServiceXXX" 
xmlns:v011="http://host/WebServiceXXX"> 
    <soapenv:Header> 
     <v01:enveloppeTechnique> 
     <v01:horodateAppel>?</v01:horodateAppel> 
     <!--Optional:--> 
     <v01:idOperation>?</v01:idOperation> 
     <v01:idTransaction>?</v01:idTransaction> 
     <v01:idConsommateur>SIV2</v01:idConsommateur> 
     <!--Optional:--> 
     <v01:idUtilisateur>?</v01:idUtilisateur> 
     <!--Optional:--> 
     <v01:canal>?</v01:canal> 
     <!--Optional:--> 
     <v01:langue>?</v01:langue> 
     <!--Optional:--> 
     <v01:pays>?</v01:pays> 
     </v01:enveloppeTechnique> 
    </soapenv:Header> 
    <soapenv:Body> 
     <v011:lireVoie> 
     <v011:CODE_COMMUNE>609</v011:CODE_COMMUNE> 
     <v011:CODE_VOIE>7440</v011:CODE_VOIE> 
     </v011:lireVoie> 
    </soapenv:Body> 
</soapenv:Envelope> 

в основном я просто скопировать значения CODE_COMMUNE и CODE_VOIE из моего основного файла XML к моей продукции. остальные поля могут быть статическими

Я создал очень простой XSL, чтобы сделать это, но у меня есть странный результат, и я не могу найти то, что случилось:

<?xml version="1.0" encoding="utf-8"?> 
203 
2985 

Мой XSL Файл:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v01="http://host/WebServiceXXX" xmlns:v011="http://host/WebServiceXXX"> 
     <soapenv:Header> 
      <v01:enveloppeTechnique> 
       <v01:horodateAppel></v01:horodateAppel> 
       <!--Optional:--> 
       <v01:idOperation></v01:idOperation> 
       <v01:idTransaction></v01:idTransaction> 
       <v01:idConsommateur>SIV2</v01:idConsommateur> 
       <!--Optional:--> 
       <v01:idUtilisateur></v01:idUtilisateur> 
       <!--Optional:--> 
       <v01:canal></v01:canal> 
       <!--Optional:--> 
       <v01:langue></v01:langue> 
       <!--Optional:--> 
       <v01:pays></v01:pays> 
      </v01:enveloppeTechnique> 
     </soapenv:Header> 
     <soapenv:Body> 
      <v011:lireVoie> 
      <xsl:template match="VOIE"> 
       <v011:CODE_COMMUNE> 
        <xsl:value-of select="CODE_COMMUNE"/> 
       </v011:CODE_COMMUNE> 
       <v011:CODE_VOIE> 
        <xsl:value-of select="CODE_VOIE" /> 
       </v011:CODE_VOIE> 
      </xsl:template> 
      </v011:lireVoie> 
     </soapenv:Body> 
</soapenv:Envelope> 
</xsl:stylesheet> 

Спасибо за любую помощь!

+0

Пожалуйста, ваш код XSLT, чтобы мы могли увидеть, что пошло не так. Результат, который вы показываете, показывает, что ни один из ваших шаблонов не был применен, и были вызваны только правила шаблона по умолчанию, которые копируют текстовые узлы. Скорее всего, проблема с пространством имен. –

+0

Обновление сообщения: XSL-код и вывод @ michael.hor257k спасибо, что помогли мне :) – tarmin

ответ

0

У вас есть несколько вопросов:

  1. Вы должны поместить ваши инструкции внутри шаблон для того, чтобы написать к выходу дерева.

  2. Исходные XML-элементы находятся в пространствах имен; вы должны объявить префикс для каждого пространства имен и использовать его при обращении к узлу в исходном документе .

  3. Вы должны использовать инструкцию <comment>, чтобы оставить комментарий .

Попробуйте так:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:max="http://www.ibm.com/maximo" 
exclude-result-prefixes="max"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:template match="/"> 
    <soapenv:Envelope xmlns:v01="http://host/WebServiceXXX" xmlns:v011="http://host/WebServiceXXX"> 
     <soapenv:Header> 
      <v01:enveloppeTechnique> 
       <v01:horodateAppel></v01:horodateAppel> 
       <xsl:comment>Optional:</xsl:comment> 
       <v01:idOperation></v01:idOperation> 
       <v01:idTransaction></v01:idTransaction> 
       <v01:idConsommateur>SIV2</v01:idConsommateur> 
       <xsl:comment>Optional:</xsl:comment> 
       <v01:idUtilisateur></v01:idUtilisateur> 
       <xsl:comment>Optional:</xsl:comment> 
       <v01:canal></v01:canal> 
       <xsl:comment>Optional:</xsl:comment> 
       <v01:langue></v01:langue> 
       <xsl:comment>Optional:</xsl:comment> 
       <v01:pays></v01:pays> 
      </v01:enveloppeTechnique> 
     </soapenv:Header> 
     <soapenv:Body> 
      <v011:lireVoie> 
       <v011:CODE_COMMUNE> 
        <xsl:value-of select="soapenv:Envelope/soapenv:Body/max:InvokeLIREVOIE/max:LIREVOIESet/max:VOIE/max:CODE_COMMUNE"/> 
       </v011:CODE_COMMUNE> 
       <v011:CODE_VOIE> 
        <xsl:value-of select="soapenv:Envelope/soapenv:Body/max:InvokeLIREVOIE/max:LIREVOIESet/max:VOIE/max:CODE_VOIE" /> 
       </v011:CODE_VOIE> 
      </v011:lireVoie> 
     </soapenv:Body> 
    </soapenv:Envelope> 
</xsl:template> 

</xsl:stylesheet> 
Смежные вопросы