1

誰かが私が抱えているトリッキーな問題で私を喜ばせるのを手伝ってくれるだろうか。おそらくここでは不可能なことを尋ねますが、何か提案を聞くことに興味があるでしょう。

ノードの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>
4

2 に答える 2

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番目の要素に含まれるXHTMLを生成する変換cellは簡単です。

<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>

ここでファイルを開くと:c:\temp\delete\delete2.xmlIEを使用すると、結果は次のようになります。

<!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ファイル

これは1行のテキストです

これは1行のテキストです

これは1行のテキストです

于 2012-05-03T11:37:44.867 に答える
0
<xsl:value-of select="cell[2]" disable-output-escaping="yes" />

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

于 2012-05-03T10:24:07.310 に答える