Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT basic-不正确的转换_Xml_Xslt_Soap - Fatal编程技术网

Xml XSLT basic-不正确的转换

Xml XSLT basic-不正确的转换,xml,xslt,soap,Xml,Xslt,Soap,我刚刚开始使用XSLT,无法继续创建非常简单的XSL 我的问题是: 我有一个基本的xml文件: <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <InvokeLIREVOIE xmlns="http://www.ibm.

我刚刚开始使用XSLT,无法继续创建非常简单的XSL 我的问题是: 我有一个基本的xml文件:

<?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>

203
2985
... (更多无用元素)
转换后的输出必须为:

<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>

?
?
?
SIV2
?
?
?
?
609
7440
基本上,我只需要将CODE_COMMUNE和CODE_VOIE值从主xml文件复制到输出。 其他字段可以是静态的

为此,我创建了一个非常基本的XSL,但我有一个奇怪的输出,我找不到哪里出了问题:

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

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>

SIV2

谢谢你的帮助

您有几个问题:

  • 您必须将说明放入模板中才能编写 到输出树

  • 源XML元素位于名称空间中;你必须申报 为每个名称空间添加前缀,并在为中的节点寻址时使用它 源文件

  • 必须使用
    说明才能放置注释 在输出中

  • 试着这样做:

    XSLT1.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>
    
    
    可选:
    SIV2
    可选:
    可选:
    可选:
    可选:
    
    请发布您的XSLT代码,以便我们看到哪里出了问题。显示的结果表明没有应用任何模板,只调用了复制文本节点的默认模板规则。很可能是名称空间问题。更新帖子:XSL代码和输出@michael.hor257k谢谢您的帮助:)