2013-11-27 11 views
5

入力XML isXSLTを使用してのCData内部のXML要素を解析し、HTML

<getArtifactContentResponse> 
<return> 
<![CDATA[ 
<metadata> 
<overview>  
<name>scannapp</name> 
<developerId>developer702</developerId> 
<stateId>2</stateId> 
<serverURL>abc.com</serverURL> 
<id>cspapp1103</id> 
<description>scann doc</description> 
<hostingTypeId>1</hostingTypeId>  
</overview> 
</metadata> 
    ]]> 
    </return> 
</getArtifactContentResponse> 

に印刷下記は、私が開発したスタイルシートがあります。私はCdata内のXMLを取得することができますが、要素の値を取得することはできません。

<html><body><h1>Company Details</h1><table border="1"><tr><th>name</th><th>developerId</th><th>serverURL</th></tr>table 


        <tr><td></td><td></td><td></td></tr></table></body></html> 

として期待出力

<html><body><h1>Company Details</h1><table border="1"><tr><th>name</th><th>developerId</th><th>serverURL</th></tr>table 


        <tr><td>scannapp</td><td>developer702</td><td>cspapp1103</td></tr></table></body></html> 

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > 
<xsl:output method="html" encoding="utf-8" omit-xml-declaration="no" indent="no"/> 
    <xsl:template match="/"> 
     <html> 
     <body> 
      <h1>Company Details</h1> 
      <table border="1"> 
       <tr> 
        <th>name</th> 
        <th>developerId</th> 
        <th>Id</th> 
       </tr>table 

       <xsl:variable name ="data" select="//getArtifactContentResponse/return/node()" /> 
        <tr> 
        <td> 
         <xsl:value-of select="$data/metadata/overview/name" disable-output-escaping="yes"/> 


        </td> 
        <td> 
         <xsl:value-of select="$data/metadata/overview/developerId" /> 
        </td> 
        <td> 
         <xsl:value-of select="$data/metadata/overview/Id" /> 
        </td> 
        </tr> 

      </table> 

     </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

出力Iは、値の名前を取るdeveloperId、同上およびHTMLに印刷します。それを行う方法私を助けてください。 XSLT version1.0を使用しています。

+2

どのXSLT 1.0プロセッサを使用しますか?文字列をXMLで解析してノードにする拡張関数が必要です。 –

+0

@MartinHonnenあなたはどの機能を覚えていますか? –

+0

@ user3016153 XSLTプロセッサによっては、既存のソリューションがあるか、Microsoftの 'XslCompiledTransform'などで実装するのが簡単です。拡張関数やオブジェクトを使用して、XMLを解析するためにXPathDocumentを使用することができます。 MicrosoftのMSXMLでは、JScriptで実装されている拡張機能を使用するだけで、たとえば、 '関数parseXml(文字列){varドキュメント=新しいActiveXObject( 'Msxml2.DOMDocument.3.0'); doc.loadXML(string); return doc; } '。 –

答えて

1

AFAIKのように、CDATA をXMLとして解析する方法はありません。

セクションをテキストとして解析する拡張機能を使用すると便利ですが、実際には必要ありません。後で3つのアイテムを抽出する例を示します。

... 
<xsl:variable name ="cdata" select="/getArtifactContentResponse/return" /> 

<name> 
    <xsl:value-of select="substring-before(substring-after($cdata, '&lt;name&gt;'), '&lt;/name&gt;')"/> 
</name> 

<developerId> 
    <xsl:value-of select="substring-before(substring-after($cdata, '&lt;developerId&gt;'), '&lt;/developerId&gt;')"/> 
</developerId> 

<id> 
    <xsl:value-of select="substring-before(substring-after($cdata, '&lt;id&gt;'), '&lt;/id&gt;')"/> 
</id> 
... 
+0

コードは正常に動作していますが、期待した結果が得られています。ありがとうございます。私はsubstring関数を使いたいとは思わない。 – user3042857

+0

サブストリング関数は、期待される出力への最短経路を提供すると信じています。なぜあなたはそれを使いたくないのですか? –

関連する問題