2

<xsl:attribute-set>xslドキュメントでを使用しようとしていますが、エラーメッセージが表示され続けます。

  • コンパイルエラー:47行目の要素属性セット
  • 要素属性-スタイルシートの子としてのみ許可されるセット

また、 XSLT属性セットに関するW3Schools Webサイトの説明を確認したところ、次のことがわかりました。

Must be child of <xsl:stylesheet> or <xsl:transform>.

これが何を意味するのかわかりませんが、誰か説明できますか?

私のドキュメントに関する詳細情報が必要な場合は、WAMPサーバーのセットアップについて以下にコメントしてください。

XSLドキュメントの最初の2行は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">

彼らが何をしているのか私にはわかりません。それがないと、私のXSLは機能しません。

基本的に、このXSLファイルを使用してXMLをHTMLに変換しています。プロセス全体はPHPによって実行されます。

# START XSLT
$xslt = new XSLTProcessor(); 
$XSL = new DOMDocument(); 
$XSL->load('hello.xsl'); 
$xslt->importStylesheet($XSL); 

# LOAD XML FILE 
$XML = new DOMDocument();
$XML->load('hello.xml');

#PRINT 
print $xslt->transformToXML($XML);
4

3 に答える 3

2

非常にまれにしか見られない「スタイルシートとしての文字通りの結果要素」機能を使用しています。これは「簡略化されたスタイルシート」とも呼ばれ、xsl:stylesheet要素と最も外側の要素xsl:templateが暗黙的です。あなたの問題は、なぜこの施設がめったに使用されないのかを示しています-それはすぐに蒸気を使い果たします。要素がないためxsl:stylesheet、の通常の子はxsl:stylesheet存在できません。これには、属性セットの宣言が含まれます。

xsl:stylesheetコードを変更して、明示的なとでラップしますxsl:template match="/"xsl:attribute-set次に、と同じレベルでを追加しxsl:templateます。

于 2011-02-23T09:05:11.020 に答える
1

XSLTの開始が質問に追加される前に、次のように書かれています。問題のスタイルシートの性質として、文字通りの結果要素には対応していません。マイケルケイの答えはそうです。

は、XSLTのルート要素である要素xsl:attribute-setの子要素である必要があります。これは、またはxsl:stylesheetと同じです。xsl:outputxsl:template

この規格では、これらの要素は「トップレベル要素」カテゴリにあると説明されています。

w3schools.comはこれをいくつかの方法で言います:

  • ELMENTはトップレベルの要素です。
  • <xsl:stylesheet>または<xsl:transform>の子である必要があります
  • ELEMENTは最上位の要素であり、<xsl:stylesheet>または<xsl:transform>の子ノードとして表示される必要があります

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

    <xsl:output method="xml" indent="yes"/>

    <xsl:attribute-set name="body-attr">
        <xsl:attribute name="color">red</xsl:attribute>
    </xsl:attribute-set>

    <xsl:template match="/">
        <xsl:element name="result" use-attribute-sets="body-attr">
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>
于 2011-02-23T07:15:07.240 に答える
0

これが単純化された構文で機能する別の方法は、xmlnsをタグから移動し、関数htmlを介してソースファイルをインライン化することです。document

<?xml version="1.0" encoding="UTF-8"?>
 <section
  xsl:version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns=""
 >

    <blockquote>
        <xsl:for-each select="document('movies.xml')//processing-instruction()[contains(., '2014')]">
            <p><xsl:value-of select="concat( local-name(),' ', current() )"/></p>

            <a href="{substring-before(document('movies.xml')//processing-instruction(),',')}">
                <input type="button" value="Stream {local-name()}"/>
            </a>

            <a href="{substring-after(document('movies.xml')//processing-instruction(),',')}">
                <input type="button" value="{local-name()} Soundtrack"/>                    
            </a>

        </xsl:for-each>            
    </blockquote>

 </section>

次に、それを含めます。

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
    <include href="simple.xsl"/>
    <attribute-set name="foo"></attribute-set>
    <apply-templates/>
</stylesheet>

つまり、変換を開始する唯一の便利な方法は、名前のないモードを使用して暗黙のmatch = "/"テンプレートルールによって照合される、最初の一致選択としてドキュメントノードを提供することです。

参考文献

于 2014-06-10T02:05:49.303 に答える