3

在xml样式表中,“strip-space”选择所有元素(elements =“*”),但“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

xml 样式表中的两个顶级元素是否冲突?

是的,W3 XSLT 规范规定了解决这些冲突的严格方法

与 xsl:strip-space 和 xsl:preserve-space 元素匹配的冲突的解决方式与模板规则之间的冲突相同(请参阅[5.5 模板规则的冲突解决])。因此,特定元素名称的适用匹配确定如下

  • 首先,任何导入优先级低于另一个匹配的匹配都会被忽略
  • 接下来,任何与 NameTest 的匹配,其默认优先级低于另一个匹配的 NameTest 的默认优先级

如果这留下了不止一个匹配,这是一个错误。XSLT 处理器可能会发出错误信号;如果它没有发出错误信号,它必须通过从剩下的匹配中选择样式表中最后出现的匹配来恢复

o,简单来说,两个冲突规则(xsl:strip-spacexsl:preserve-space)中的一个在给定名称的最后出现,获胜或 XSLT 处理器给出错误消息。

但是请注意,以下之间没有冲突

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

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

因为任何名称都比它更具体*,因此具有更高的优先级。

因此,在这个具体的例子中,只有空格的文本节点——名称为 in 的所有元素的子节点——xsl:preserve-space将被保留——不管 的顺序如何xsl:strip-space elements="*" xsl:preserve-space elements="{list-of-names}",因为名称比*.

于 2012-06-02T15:01:15.680 回答
1

来自 W3C

对于源文档,whitespace-preserving元素名称集由xsl:strip-space顶级xsl:preserve-space元素指定。这些元素每个都有一个元素属性,其值是由空格分隔的 NameTests 列表。最初,保留空格的元素名称集包含所有元素名称。如果元素名称与元素中的 a 匹配NameTestxsl:strip-space则将其从保留空格的元素名称集中删除。如果元素名称与元素中的 NameTest 匹配xsl:preserve-space,则将其添加到保留空格的元素名称集中。一个元素匹配一个 NameTest 当且仅当 NameTest 对于元素为 true 作为一个XPath node test. 匹配到xsl:strip-spacexsl:preserve-space元素之间的冲突的解决方式与模板规则之间的冲突相同(请参阅5.5 模板规则的冲突解决)。

于 2012-06-02T11:38:54.170 回答
0

如您所愿,可能:http ://www.w3schools.com/xsl/el_preserve-space.asp 或此处:http: //xmlplease.com/whitespace

所有未出现在您的保留空间列表中的空白节点都将被删除,即

<someexample>    </someexample>

将被视为

<someexample />

由于您的列表比“*”更具体,因此它具有优先权,请参阅另一篇文章中的链接。

于 2012-06-02T10:57:13.060 回答