0

私はXMLファイルを作成し、xsdスキーマで検証に成功し、次にxmlファイルのデータをテーブルに変換するためにxsltファイルを作成しましたが、ブラウザで開こうとするたびにデータが同じように表示されます表にない行、私は自分のコードが正しいと確信しており、なぜそれが機能しないのかわかりません.3つのファイルは次のとおりです :

XML ファイル:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="XSLT_XMLToHTML.xml"?>
<Services>
  <Service WsdlUrl="http://venus.eas.asu.edu/WSRepository/Services/BasicThreeSvc/Service.svc" TryItUrl="">
    <Name>ABasic Three in SVC</Name>
    <Provider>http://venus.eas.asu.edu</Provider>
    <Category>SVC</Category>
    <Operations>
      <Operation>
        <Name>HelloWorld</Name>
        <MsgIn>IService_HelloWorld_InputMessage</MsgIn>
        <MsgOut>Service_HelloWorld_OutputMessage</MsgOut>
      </Operation>
      <Operation>
        <Name>PiValue</Name>
        <MsgIn>IService_PiValue_InputMessage</MsgIn>
        <MsgOut>IService_PiValue_OutputMessage</MsgOut>
      </Operation>  
<Operation>
        <Name>absValue</Name>
        <MsgIn>IService_absValue_InputMessage</MsgIn>
        <MsgOut>IService_absValue_OutputMessage</MsgOut>
      </Operation>    
    </Operations>
  </Service>

  <Service WsdlUrl="http://venus.eas.asu.edu/WSRepository/Services/EncryptionWcf/Service.svc?wsdl">
    <Name>Crypto service in SVC</Name>
    <Provider>http://venus.eas.asu.edu/</Provider>
    <Category>SVC</Category>
    <Operations>
      <Operation>
        <Name>Encrypt</Name>
        <MsgIn>IService_Encrypt_InputMessage</MsgIn>
        <MsgOut>IService_Encrypt_OutputMessage</MsgOut>
      </Operation>
      <Operation>
        <Name>Decrypt</Name>
        <MsgIn>IService_Decrypt_InputMessage</MsgIn>
        <MsgOut>IService_Decrypt_OutputMessage</MsgOut>
      </Operation>
    </Operations>
  </Service>

  <Service WsdlUrl="http://venus.eas.asu.edu/WSRepository/Services/WFImage/WFService/Service1.xamlx?wsdl">
    <Name>Image verifier in workflow</Name>
    <Provider>http://venus.eas.asu.edu/</Provider>
    <Category>xamlx</Category>
    <Operations>
      <Operation>
        <Name>GetImage</Name>
        <MsgIn>IImage_GetImage_InputMessage</MsgIn>
        <MsgOut>IImage_GetImage_OutputMessage</MsgOut>
      </Operation>
      <Operation>
        <Name>IImage_GetImage_InputMessage</Name>
        <MsgIn></MsgIn>
        <MsgOut></MsgOut>
      </Operation>
      <Operation>
        <Name>IImage_GetImage_OutputMessage</Name>
        <MsgIn></MsgIn>
        <MsgOut></MsgOut>
      </Operation>    
       <Operation>
        <Name>Reboot</Name>
        <MsgIn>IReboot_Reboot_InputMessage</MsgIn>
        <MsgOut>IReboot_Reboot_OutputMessage</MsgOut>
      </Operation>
      </Operations>
  </Service>
  <Service WsdlUrl="http://venus.eas.asu.edu/WSRepository/Services/Encryption/Service.asmx">
    <Name>Service</Name>
    <Provider>http://venus.eas.asu.edu</Provider>
    <Category>asmx</Category>
    <Operations>
      <Operation>
        <Name>Encrypt</Name>
        <MsgIn>string</MsgIn>
        <MsgOut>string</MsgOut>
      </Operation>
      <Operation>
        <Name>Decrypt</Name>
        <MsgIn>string</MsgIn>
        <MsgOut>string</MsgOut>
      </Operation>
    </Operations>
  </Service>

  <Service WsdlUrl="http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl" >
    <Name>CalculatorServiceServlet</Name>
    <Provider>http://graphical.weather.gov/</Provider>
    <Category>PHP</Category>
    <Operations>
      <Operation>
        <Name>NDFDgen</Name>
        <MsgIn>URL</MsgIn>
        <MsgOut>URL</MsgOut>
      </Operation>
       <Operation>
        <Name>LatLonListSubgrid</Name>
        <MsgIn>URL</MsgIn>
        <MsgOut>URL</MsgOut>
      </Operation>
      <Operation>
        <Name>LatLonListSubgrid</Name>
        <MsgIn>URL</MsgIn>
        <MsgOut>URL</MsgOut>
      </Operation>
      <Operation>
        <Name>LatLonListLine</Name>
        <MsgIn>URL</MsgIn>
        <MsgOut>URL</MsgOut>
      </Operation>    
    </Operations>
  </Service>  

<Service WsdlUrl="http://www.ebi.ac.uk/webservices/whatizit/ws?wsdl" >
    <Name>pipelineName</Name>
    <Provider>http://www.ebi.ac.uk/</Provider>
    <Category>JAVA</Category>
    <Operations>
      <Operation>
        <Name>contact</Name>
        <MsgIn>contact</MsgIn>
        <MsgOut>contactResponse</MsgOut>
      </Operation>
      <Operation>
        <Name>getPipelinesStatus</Name>
        <MsgIn>getPipelinesStatus</MsgIn>
        <MsgOut>getPipelinesStatusResponse</MsgOut>
      </Operation>
      <Operation>
        <Name>queryPmid</Name>
        <MsgIn>queryPmid</MsgIn>
        <MsgOut>WhatizitException</MsgOut>
      </Operation>        
    </Operations>
  </Service> 

</Services>

XSL ファイル:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output omit-xml-declaration="yes" indent="yes" />
   <xsl:template match="node()|@*" />
   <xsl:template match="/Services">
      <html>
         <head>
            <title>XSLT example</title>
         </head>
         <body>
            <xsl:apply-templates />
         </body>
      </html>
   </xsl:template>
   <xsl:template match="Service">
      <xsl:apply-templates />
   </xsl:template>
   <xsl:template match="Operations">
      <table>
         <thead>
            <tr>
               <td>Name</td>
               <td>Description</td>
               <td>Type</td>
            </tr>
         </thead>
         <tbody>
            <xsl:apply-templates />
         </tbody>
      </table>
   </xsl:template>
   <xsl:template match="Opertaion">
      <!-- [sic] -->
      <xsl:variable name="service" select="ancestor::Service" />
      <tr>
         <td>
            <xsl:value-of select="$service/Name" />
         </td>
         <td>
            <xsl:value-of select="Name" />
         </td>
         <td>
            <xsl:value-of select="$service/Category" />
         </td>
      </tr>
   </xsl:template>
</xsl:transform>
4

1 に答える 1

2

おそらくこれはあなたの質問のタイプミスですが、「sic」はそうではないことを示唆しているため、問題はこの行にある可能性があります

<xsl:template match="Opertaion"> <!-- [sic] -->

ソース XML には "Opertaion" 要素はなく、"Operation" 要素のみがあります。「操作」ではなく「操作」に一致するようにテンプレートを変更すると、期待どおりに機能するはずです。

唯一の混乱は、「データがテーブルではなく同じ行に表示される」と言うところです。XSLT には、XSLT ドキュメントで指定されたノードに一致するものが見つからない場合に使用される組み込みテンプレートの概念があるため、通常、これは理にかなっています。組み込みテンプレートは、見つかったテキスト ノードのテキストを出力しますが、他のノードの場合は、その子の処理を続行します。これは、テキストだけの行を取得した理由を説明します。

ただし、XSLT にこの行があります。

<xsl:template match="node()|@*"/>

この場合、これは「操作」と一致するため、この時点で処理を停止します。つまり、実際にはテキスト出力を取得しないでください。もちろん、テンプレートの一致を「操作」から「操作」に修正すれば、これは問題になりません。

于 2013-11-03T11:28:34.920 に答える