2013-11-03 27 views
0

我创建了一个XML文件,并成功通过xsd模式验证它,然后创建了一个xslt文件,将xml文件中的数据转换为表格 ,但每次尝试将其打开到浏览器中时,数据显示在不一样的线对表,我敢肯定,我的代码是正确的,我不知道为什么它不工作,这里是3个文件: https://www.dropbox.com/sh/gggkh4wg94simrl/2GbiHAGkVFXML操作

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> 

回答

2

也许这是你的问题一个错字,但“原文”暗示没有,因此,问题可能出在这条线

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

有源XML没有“Opertaion”元素,只有一个“操作”元素。如果您更改模板以匹配“操作”而不是“Opertaion”,它应该按预期工作。

唯一的困惑是你说“数据显示在同一行而不是表格中”。通常情况下,这是有道理的,因为XSLT具有内置模板的概念,在XSLT文档中指定的节点找不到匹配时使用。内置的模板会为文本节点输出文本,但其他节点只是继续处理其子节点。这可以解释为什么你有一行文本。

但是,你有没有这个线在你的XSLT

​​

这会在这种情况下匹配“运行”,在这一点上,从而停止处理,这意味着你不应该真正得到任何文本输出。当然,只要将模板匹配从“Opertaion”更正为“Operation”,这不会成为问题。

+0

问题解决了,最后一件事,我无法在浏览器中看到边框,它应该没有它们? – user1863359

+2

您尚未在输出的HTML中指定任何关于边框的内容。如果您将其更改为输出'

'您应该看到一些例子,尽管它看起来不太漂亮。这更多的是HTML(或最好是CSS)问题,但与XSLT无关。 –

+0

@TimC,OP直接从[这个答案](http://stackoverflow.com/a/19713250/4525)发布了XSLT。在这个问题中,示例XML被拼写错误,因此是“sic”。 – harpo