2011-07-15 3 views
1

私は、オブジェクトリストを含むSOAP応答を処理する能力に関してSUPの制限に遭遇したようですが、これを処理するカスタムXSLTを書くことが可能かどうか疑問です。 SOAPを介してgetProjectsNoSchemesメソッドを介してJiraを呼び出しようとしています。このメソッドは、RemoteProjectオブジェクトの配列を返します。最終的には、各ノードをテーブル内の行として扱うことができるようにしたいと思いますが、残念ながら、これが可能かどうかを知るにはXSLTについて十分に分かりません。これがSUPでも実行可能な解決策であるのかどうかもわかりません。カスタムXSLT定義は、MBOを定義するときにオブジェクトの配列を返すSOAP応答を処理できますか?

SOAP応答のサンプルは以下の通りです:

<?xml version="1.0" encoding="utf-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
    <ns1:GetProjectsNoSchemesResponse 
     soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
     xmlns:ns1="http://www.webserviceX.NET"> 
     <GetProjectsNoSchemesReturn 
      soapenc:arrayType="ns2:RemoteProject[2]" xsi:type="soapenc:Array" 
      xmlns:ns2="http://beans.soap.rpc.jira.atlassian.com" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> 
      <GetProjectsNoSchemesReturn href="#id0" /> 
      <GetProjectsNoSchemesReturn href="#id1" /> 
     </GetProjectsNoSchemesReturn> 
    </ns1:GetProjectsNoSchemesResponse> 
    <multiRef id="id0" soapenc:root="0" 
     soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
     xsi:type="ns3:RemoteProject" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
     xmlns:ns3="http://beans.soap.rpc.jira.atlassian.com"> 
     <description xsi:type="xsd:string">Mobile Web Project POC 
     </description> 
     <id xsi:type="xsd:string">10034</id> 
     <issueSecurityScheme xsi:type="ns3:RemoteScheme" 
      xsi:nil="true" /> 
     <key xsi:type="xsd:string">XLIPOC</key> 
     <lead xsi:type="xsd:string">benm</lead> 
     <name xsi:type="xsd:string">Redacted Project</name> 
     <notificationScheme xsi:type="ns3:RemoteScheme" 
      xsi:nil="true" /> 
     <permissionScheme xsi:type="ns3:RemotePermissionScheme" 
      xsi:nil="true" /> 
     <projectUrl xsi:type="xsd:string"></projectUrl> 
     <url xsi:type="xsd:string">https://redacted.com/browse/REDACTED</url> 
    </multiRef> 
    <multiRef id="id1" soapenc:root="0" 
     soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
     xsi:type="ns4:RemoteProject" xmlns:ns4="http://beans.soap.rpc.jira.atlassian.com" 
     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> 
     <description xsi:type="xsd:string"></description> 
     <id xsi:type="xsd:string">10017</id> 
     <issueSecurityScheme xsi:type="ns4:RemoteScheme" 
      xsi:nil="true" /> 
     <key xsi:type="xsd:string">GIC</key> 
     <lead xsi:type="xsd:string">gregm</lead> 
     <name xsi:type="xsd:string">REDACTED</name> 
     <notificationScheme xsi:type="ns4:RemoteScheme" 
      xsi:nil="true" /> 
     <permissionScheme xsi:type="ns4:RemotePermissionScheme" 
      xsi:nil="true" /> 
     <projectUrl xsi:type="xsd:string"></projectUrl> 
     <url xsi:type="xsd:string">https://redacted.com/browse/REDACTED</url> 
    </multiRef> 
</soapenv:Body> 

+0

各multiRef要素を(HTTML?)行に変換するXSLTを作成することはあまり難しくありません。あなたは各列の列に何を望みますか?サンプル出力を提供できれば、誰かがあなたのために答えを出すかもしれません。 –

答えて

1

はい、それは可能だし、そうすることは比較的容易。

<multRef>要素のテーブル行を含むHTMLドキュメントを生成するXSLTの例を以下に示します。

<multiRef>の各子要素は、子要素のそれぞれの列と行として最初の見出し列の要素の名前を使用して、テーブルヘッダーとしてレンダリングされ、その後、各<multiRef>がレンダリングされる:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <html> 
      <head></head> 
      <body> 
       <table border="1"> 
        <xsl:apply-templates select="*/*/multiRef[1]" mode="header"/> 
        <xsl:apply-templates select="*/*/multiRef" /> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="multiRef" mode="header"> 
     <thead> 
      <tr> 
       <xsl:apply-templates mode="header"/> 
      </tr> 
     </thead> 
    </xsl:template> 

    <xsl:template match="multiRef/*" mode="header"> 
     <th> 
      <xsl:value-of select="local-name()"/> 
     </th> 
    </xsl:template> 

    <xsl:template match="multiRef"> 
     <tr> 
      <xsl:apply-templates/> 
     </tr> 
    </xsl:template> 

    <xsl:template match="multiRef/*"> 
     <td> 
      <xsl:apply-templates/> 
     </td> 
    </xsl:template> 
</xsl:stylesheet> 

いるサンプルXMLに適用する場合、それは次のHTMLを生成する:

<html> 
    <head> 
    <META http-equiv="Content-Type" content="text/html; charset=UTF-16"> 
    </head> 
    <body> 
     <table border="1"> 
      <thead> 
       <tr> 
        <th>description</th> 
        <th>id</th> 
        <th>issueSecurityScheme</th> 
        <th>key</th> 
        <th>lead</th> 
        <th>name</th> 
        <th>notificationScheme</th> 
        <th>permissionScheme</th> 
        <th>projectUrl</th> 
        <th>url</th> 
       </tr> 
      </thead> 
      <tr> 
       <td>Mobile Web Project POC 
       </td> 
       <td>10034</td> 
       <td></td> 
       <td>XLIPOC</td> 
       <td>benm</td> 
       <td>Redacted Project</td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td>https://redacted.com/browse/REDACTED</td> 
      </tr> 
      <tr> 
       <td></td> 
       <td>10017</td> 
       <td></td> 
       <td>GIC</td> 
       <td>gregm</td> 
       <td>REDACTED</td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td>https://redacted.com/browse/REDACTED</td> 
      </tr> 
     </table> 
    </body> 
</html> 
+0

これは本当に役に立ち、正しい軌道に乗ってくれました! – janarde

1

SUPは、非常に特殊な形式のXMLが私はのために、各構築物を用いて応答してマルチ参考文献を横断しなければならなかった期待:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="//ns1:getProjectsNoSchemesResponse"> 
    <data> 
     <Record> 
      <Field op_label="id" op_position="1" op_datatype="STRING" op_nullable="true">id</Field> 
      <Field op_label="name" op_position="2" op_datatype="STRING" op_nullable="true">name</Field> 
      <Field op_label="description" op_position="3" op_datatype="STRING" op_nullable="true">description</Field> 
     </Record> 
     <xsl:for-each select="//ns1:getProjectsNoSchemesResponse/getProjectsNoSchemesReturn/href*"> 
      <Record> 
       <Field> 
        <xsl:attribute name="op_label">id</xsl:attribute> 
        <xsl:attribute name="op_position">1</xsl:attribute> 
        <xsl:attribute name="op_datatype">STRING</xsl:attribute> 
        <xsl:attribute name="op_nullable">true</xsl:attribute> 
        <xsl:value-of select="getProjectNoSchemesReturn/id" /> 
       </Field> 
       <Field> 
        <xsl:attribute name="op_label">name</xsl:attribute> 
        <xsl:attribute name="op_position">2</xsl:attribute> 
        <xsl:attribute name="op_datatype">STRING</xsl:attribute> 
        <xsl:attribute name="op_nullable">true</xsl:attribute> 
        <xsl:value-of select="getProjectNoSchemesReturn/name" /> 
       </Field> 
       <Field> 
        <xsl:attribute name="op_label">description</xsl:attribute> 
        <xsl:attribute name="op_position">3</xsl:attribute> 
        <xsl:attribute name="op_datatype">STRING</xsl:attribute> 
        <xsl:attribute name="op_nullable">true</xsl:attribute> 
        <xsl:value-of select="getProjectNoSchemesReturn/name" /> 
       </Field> 
      </Record> 
     </xsl:for-each> 
    </data> 
    </xsl:template> 
</xsl:stylesheet>