3

xml スタイルシートで、"strip-space" はすべての要素 (elements="*") を選択しますが、"preserve-space" は要素の一部を選択します。スタイルシートの 2 つのルート要素は互いに競合しますか?

「strip-space」と「preserve-space」に属する要素はどのように解析されますか? 「abbrev」、「abbrev_journal_title」など?

<xsl:strip-space elements="*"/>

  <!-- Space is preserved in all elements allowing #PCDATA -->
  <xsl:preserve-space
    elements="abbrev abbrev-journal-title access-date addr-line aff 
              alt-text alt-title article-id article-title attrib 
              award-id bold chapter-title chem-struct collab comment 
              compound-kwd-part conf-acronym conf-date conf-loc conf-name 
              conf-num conf-sponsor conf-theme copyright-holder 
              copyright-statement copyright-year corresp country 
              date-in-citation day def-head degrees disp-formula 
              edition elocation-id email etal ext-link fax fpage 
              funding-source funding-statement given-names glyph-data gov 
              inline-formula inline-supplementary-material institution 
              isbn issn issue issue-id issue-part issue-sponsor 
              issue-title italic journal-id journal-subtitle 
              journal-title kwd label license-p long-desc lpage 
              meta-name meta-value mixed-citation monospace month 
              named-content object-id on-behalf-of overline p 
              page-range part-title patent phone prefix preformat 
              price principal-award-recipient principal-investigator 
              product pub-id publisher-loc publisher-name 
              related-article related-object role roman sans-serif 
              sc season self-uri series series-text series-title 
              sig sig-block size source speaker std strike 
              string-conf string-date string-name styled-content sub 
              subject subtitle suffix sup supplement surname target 
              td term term-head tex-math textual-form th time-stamp 
              title trans-source trans-subtitle trans-title underline 
              unstructured-kwd-group uri verse-line volume volume-id 
              volume-series x xref year 

              mml:annotation mml:ci mml:cn mml:csymbol mml:mi mml:mn 
              mml:mo mml:ms mml:mtext"/>
4

3 に答える 3

1

W3Cから

ソース ドキュメントの場合、whitespace-preserving要素名のセットは最上位の要素によって指定さxsl:strip-spaceれます。xsl:preserve-spaceこれらの要素にはそれぞれ、空白で区切られた NameTest のリストを値とする elements 属性があります。最初は、空白を保持する要素名のセットにはすべての要素名が含まれています。NameTest要素名が要素内のa と一致する場合、xsl:strip-space空白を保持する要素名のセットから削除されます。要素名が要素内の NameTest と一致する場合、xsl:preserve-space空白を保持する要素名のセットに追加されます。としての要素に対して NameTest が true である場合にのみ、要素は NameTest と一致しますXPath node testxsl:strip-spaceと要素の一致間のxsl:preserve-space競合は、テンプレート ルール間の競合と同じ方法で解決されます (5.5 テンプレート ルールの競合の解決)。

于 2012-06-02T11:38:54.170 に答える
1

xml スタイルシートで 2 つの最上位要素が競合していますか?

はい。W3 XSLT 仕様では、これらの競合を解決する厳密な方法が規定されています。

xsl:strip-space 要素と xsl:preserve-space 要素への一致間の競合は、テンプレート ルール間の競合と同じ方法で解決されます ( [5.5 テンプレート ルールの競合解決] を参照)。したがって、特定の要素名に適用可能な一致は次のように決定されます

  • まず、別の一致よりもインポートの優先順位が低い一致は無視されます。
  • 次に、別の一致の NameTest のデフォルト優先度よりも低いデフォルト優先度を持つ NameTest との一致は無視されます。

これが複数の一致を残す場合はエラーです。XSLT プロセッサがエラーを通知する場合があります。エラーを通知しない場合は、残っている一致の中から stylesheet で最後に発生するものを選択して回復する必要があります

簡単に言えば、競合する 2 つのルール (xsl:strip-spacexsl:preserve-space) のうち、特定の名前に対して最後に来るルールが勝つか、XSLT プロセッサがエラー メッセージを表示します。

ただし、以下の間に競合がないことに注意してください。

<xsl:strip-space elements="*"/>

<xsl:preserve-space elements="someName"/>

名前はより具体的で*あり、優先順位が高いためです。

xsl:preserve-spacexsl:strip-space elements="*" xsl:preserve-space elements="{list-of-names}"したがって、この特定の例では、名前は よりも具体的であるため、の順序に関係なく、空白のみのテキスト ノード ( 内の名前を持つすべての要素の子)が保持され*ます。

于 2012-06-02T15:01:15.680 に答える
0

あなたが意図したとおり、おそらく: http://www.w3schools.com/xsl/el_preserve-space.asp またはここ: http://xmlplease.com/whitespace

preserve-space リストに表示されていない空白ノードはすべて削除されます。つまり、

<someexample>    </someexample>

であるかのように扱われます。

<someexample />

リストは「*」よりも具体的であるため、優先順位があります。他の投稿のリンクを参照してください。

于 2012-06-02T10:57:13.060 に答える