2017-05-08 19 views
1

私は次のXMLファイルをXSLTに埋め込みました。それはむしろ、変換を適用すると、HTMLの結果を表示するよりも、ドキュメントツリーとして開き、ChromeとIEの両方でXML:組み込みXSLTで動作しません

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 

<html> 
<body> 

    <xsl:for-each select = "breakfast_menu/food"> 
     <p>Food: <xsl:value-of select = "name"/></p> 
    </xsl:for-each> 

</body> 
</html> 

</xsl:template> 

</xsl:stylesheet> 

<?xml version="1.0" encoding="UTF-8"?> 
<doc> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" id = "style1"> 
     <xsl:import href = "S1000D_compare.xsl"/> 
     <xsl:output method="html"/> 
    </xsl:stylesheet> 
    <breakfast_menu> 
     <food> 
      <name>Belgian Waffles</name> 
      <price>$5.95</price> 
      <description>Two of our famous Belgian Waffles with plenty of real maple syrup</description> 
      <calories>650</calories> 
     </food> 
     <food> 
      <name>Strawberry Belgian Waffles</name> 
      <price>$7.95</price> 
      <description>Light Belgian waffles covered with strawberries and whipped cream</description> 
      <calories>900</calories> 
     </food> 
     <food> 
      <name>Berry-Berry Belgian Waffles</name> 
      <price>$8.95</price> 
      <description>Belgian waffles covered with assorted fresh berries and whipped cream</description> 
      <calories>900</calories> 
     </food> 
     <food> 
      <name>French Toast</name> 
      <price>$4.50</price> 
      <description>Thick slices made from our homemade sourdough bread</description> 
      <calories>600</calories> 
     </food> 
     <food> 
      <name>Homestyle Breakfast</name> 
      <price>$6.95</price> 
      <description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description> 
      <calories>950</calories> 
     </food> 
    </breakfast_menu> 
</doc> 

インポートスタイルシートには、以下の内容があります。

this questionに基づいて "doc"ルート要素を追加しました。私はan online validatorを通してこの文書をエラーなしで実行しました。

+2

'xsl:import'と' xsl:output'要素は、配置した場所で意味をなさない - 'xsl:stylesheet'要素の子として属します。私はそれが実際にあなたの問題を解決するかどうかは不明ですが、それは正しい方向への一歩になります。 –

+2

また、現在のところでは、 'xsl:import'と' xsl:output'要素は 'xsl'名前空間接頭辞のスコープ内宣言を持たないことに注意してください。彼らはあなたがおそらくそれらが意味すると思われるものを意味するものではありません。 –

+0

ありがとう!コピーペーストエラーです。 (私は自分の質問を書いて始め、同様の質問に基づいていくつかのことを試してから間違った場所に更新を貼り付けました。)彼らは私のXML文書の正しい場所にあります。 –

答えて

1

一般に、ブラウザの世界ではXML文書にXSLTを直接埋め込むことはできませんが、そうしたい場合は、リンクされた回答に記載されている手順を実行する必要があります。

あなたはXMLがID属性として内部DTDサブセットで定義されたいくつかのid属性を持っている必要が埋め込まxsl:stylesheet要素ににリンクxml-stylesheet処理命令を持っていることを確認する必要があります。

私はあなたが以下のような簡単な例をサポートするために、MozillaブラウザとChromeを得ることができると思うその方法は

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="#style1"?> 
<!DOCTYPE doc [ 
    <!ELEMENT xsl:stylesheet (#PCDATA)> 
    <!ATTLIST xsl:stylesheet 
    id ID #IMPLIED> 
]> 
<doc> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" id="style1"> 
     <xsl:template match="/">   
      <html> 
       <head> 
        <title>Food list</title> 
       </head> 
       <body>    
        <xsl:for-each select="doc/breakfast_menu/food"> 
         <p>Food: <xsl:value-of select="name"/></p> 
        </xsl:for-each>    
       </body> 
      </html> 
     </xsl:template> 
     <xsl:output method="html"/> 
    </xsl:stylesheet> 
    <breakfast_menu> 
     <food> 
      <name>Belgian Waffles</name> 
      <price>$5.95</price> 
      <description>Two of our famous Belgian Waffles with plenty of real maple syrup</description> 
      <calories>650</calories> 
     </food> 
     <food> 
      <name>Strawberry Belgian Waffles</name> 
      <price>$7.95</price> 
      <description>Light Belgian waffles covered with strawberries and whipped cream</description> 
      <calories>900</calories> 
     </food> 
     <food> 
      <name>Berry-Berry Belgian Waffles</name> 
      <price>$8.95</price> 
      <description>Belgian waffles covered with assorted fresh berries and whipped cream</description> 
      <calories>900</calories> 
     </food> 
     <food> 
      <name>French Toast</name> 
      <price>$4.50</price> 
      <description>Thick slices made from our homemade sourdough bread</description> 
      <calories>600</calories> 
     </food> 
     <food> 
      <name>Homestyle Breakfast</name> 
      <price>$6.95</price> 
      <description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description> 
      <calories>950</calories> 
     </food> 
    </breakfast_menu> 
</doc> 

(それは基本的にXPathの選択doc/breakfast_menu/foodは、文書構造を考慮して修正だけで、あなたのXSLTを持っています)これはhttps://martin-honnen.github.io/xslt/2017/test2017050902.xmlというオンラインで、Windows 10の現在のバージョンのFirefoxとChromeでうまく動作します.WindowsやIEなどのMicrosoftブラウザでID属性の埋め込み<?xml-stylesheet type="text/xsl" href="#style1"?>処理命令をサポートしたことはありません。スタイルシートで、次の例

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="#style1"?> 
<!DOCTYPE doc [ 
    <!ELEMENT xsl:stylesheet (#PCDATA)> 
    <!ATTLIST xsl:stylesheet 
    id ID #IMPLIED> 
]> 
<doc> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" id="style1"> 
     <xsl:import href="test2017050901.xsl"/> 
     <xsl:output method="html"/> 
    </xsl:stylesheet> 
    <breakfast_menu> 
     <food> 
      <name>Belgian Waffles</name> 
      <price>$5.95</price> 
      <description>Two of our famous Belgian Waffles with plenty of real maple syrup</description> 
      <calories>650</calories> 
     </food> 
     <food> 
      <name>Strawberry Belgian Waffles</name> 
      <price>$7.95</price> 
      <description>Light Belgian waffles covered with strawberries and whipped cream</description> 
      <calories>900</calories> 
     </food> 
     <food> 
      <name>Berry-Berry Belgian Waffles</name> 
      <price>$8.95</price> 
      <description>Belgian waffles covered with assorted fresh berries and whipped cream</description> 
      <calories>900</calories> 
     </food> 
     <food> 
      <name>French Toast</name> 
      <price>$4.50</price> 
      <description>Thick slices made from our homemade sourdough bread</description> 
      <calories>600</calories> 
     </food> 
     <food> 
      <name>Homestyle Breakfast</name> 
      <price>$6.95</price> 
      <description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description> 
      <calories>950</calories> 
     </food> 
    </breakfast_menu> 
</doc> 

をインポートしたスタイルシートを使用するよう

その後、やって

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/">   
     <html> 
      <head> 
       <title>Food list</title> 
      </head> 
      <body>    
       <xsl:for-each select="doc/breakfast_menu/food"> 
        <p>Food: <xsl:value-of select="name"/></p> 
       </xsl:for-each>    
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

のみFirefoxなどのMozillaブラウザでhttps://martin-honnen.github.io/xslt/2017/test2017050901.xmlで私のために正常に動作します、私はわかりませんChromeが空白のページをレンダリングする理由は、バグかサポートの欠如だと思います。

関連する問題