2012-05-03 3 views
1

誰かが私が厄介な問題を抱えて私を助けてくれるかどうか疑問に思います。おそらくここでは不可能と頼んでいますが、何か提案を聞くことに興味があります。XSLT:XMLノードのコードスニペットからHTMLファイルを構築する

ノードの1つにページのHTMLが含まれているXMLファイルがあります。私はそのノードの中のデータとそれからHTMLファイルを作る方法を取っていきたいと思います。下のサンプルXMLから、cell[2]ノードを//dvm/rows/rowから変換して別のファイルに配置して、実際にそのHTMLマークアップが何を表示し、コードではなく適切なWebページとして表示できるようにしたいと考えています。

このようにXSLを挿入すると動作しますか?

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output indent="yes" method="html"/> 
<xsl:template match="/"> 
    <xsl:value-of select="//dvm/rows/row/cell[2]" disable-output-escaping="yes"/> 
</xsl:template> 
</xsl:stylesheet> 

XMLは次のとおりです。

<dvm> 
    <description>This is a DVM file</description> 
    <columns> 
    <column name="lang"/> 
    <column name="text"/> 
    <column name="code" qualifier="true" order="1"/> 
    <column name="type" qualifier="true" order="2"/> 
    <column name="subj"/> 
    <column name="urem"/> 
    <column name="vreq"/> 
</columns> 
<rows> 
    <row> 
    <cell>English(UK)</cell> 
    <cell><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
      <html xmlns="http://www.w3.org/1999/xhtml"> 
      <head> 
       <title>My HTML File</title> 
      </head> 
      <body> 
      <div class="text"> 
      <p>This is a line of text</p> 
      <p>This is a line of text</p> 
      <p>This is a line of text</p> 
      </div> 
      </body> 
      </html>]]> 
    </cell> 
    <cell>Code 1</cell> 
    <cell>Text</cell> 
    <cell>HTML Block 1</cell> 
    <cell/> 
    <cell/> 
    </row> 
</rows> 
</dvm> 

答えて

2

CDATAセクションを取り除き、通常のマークアップとして含むテキストを使用する必要があります。 DOCTYPEは、(それが変換することによって生成される)が除去されるべきである:

<?xml-stylesheet type="text/xsl" href="delete_3.xsl" ?> 
<dvm> 
    <description>This is a DVM file</description> 
    <columns> 
     <column name="lang"/> 
     <column name="text"/> 
     <column name="code" qualifier="true" order="1"/> 
     <column name="type" qualifier="true" order="2"/> 
     <column name="subj"/> 
     <column name="urem"/> 
     <column name="vreq"/> 
    </columns> 
    <rows> 
     <row> 
      <cell>English(UK)</cell> 
      <cell> 
       <html xmlns="http://www.w3.org/1999/xhtml"> 
       <head> 
        <title>My HTML File</title> 
       </head> 
       <body> 
       <div class="text"> 
       <p>This is a line of text</p> 
       <p>This is a line of text</p> 
       <p>This is a line of text</p> 
       </div> 
       </body> 
       </html> 
     </cell> 
      <cell>Code 1</cell> 
      <cell>Text</cell> 
      <cell>HTML Block 1</cell> 
      <cell/> 
      <cell/> 
     </row> 
    </rows> 
</dvm> 

第2 cellに含まれるXHTMLを生成する変換素子が単純である:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="/*/rows/*/cell[2]/node()"/> 
</xsl:template> 
</xsl:stylesheet> 

今私は、ファイルを開く:IEとc:\temp\delete\delete2.xmlが、結果はです:

<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>My HTML File</title> 
    </head> 
    <body> 
     <div class="text"> 
     <p>This is a line of text</p> 
     <p>This is a line of text</p> 
     <p>This is a line of text</p> 
     </div> 
    </body> 
</html> 

、これはと、ブラウザで表示されます。これは、テキスト

のラインは、これはテキストの行である

私のHTMLファイル

これはテキストの行です

0
<xsl:value-of select="cell[2]" disable-output-escaping="yes" /> 

注意ご<cell>はXHTMLが含まれているので、CDATAセクションのための本当の必要がないこと。 XHTMLとXMLは互換性があります。最初に文字列に変換することなく、もう一方の内部を転送できます。

+0

ありがとうございます!私はあなたの提案を私のXSLテンプレートに入れようとしたときに私の質問にわずかな修正を加えましたが、コード・ブロックをテキスト・フォームで表示しました(私は「ビュー・ソース」を行っていました)。私はそれを正しい方法と呼んでいますか? – JaXL

+0

ソースを見たときにHTMLコードが表示されましたか?よくわかりません。結局のところ、これは期待される結果です。いいえ? – Tomalak

+0

申し訳ありません - 私は最後のコメントを少しひどく言いました。私は、ブラウザでXSL変換を試してみると、コードブロックをテキスト形式で表示していました(実際には表示ソースを実行していないかのように言いたいのです)。私が意図していたのは、私が選んだHTMLのレンダリングされた結果をどのように見るかでした。e。そのコードセグメントのWebページそれがより理にかなったことを願って! – JaXL

関連する問題