Xslt 如何在<;xsl:attribute>;文本?

Xslt 如何在<;xsl:attribute>;文本?,xslt,Xslt,我的XSLT样式表生成HTML,其中一些元素可能包含data-…属性,以将附加数据传递给框架。例如,我使用以下代码生成一个元素: 在这种情况下,如何为生成标记文本 (有些关联:和。) 答案 谢谢你的回答!虽然我认为这提供了技术上正确的解决方案来正确实现我所需要的,但我认为这更直接地解决了我的问题。您不能在xsl:attribute内生成标记,因为XML不允许在属性内生成未经扫描的标记。 具体地说,forAttValue禁止在属性值中放置未缩放的标记,但是-如果将尖括号(以及引号中的任何符号和引号

我的XSLT样式表生成HTML,其中一些元素可能包含
data-…
属性,以将附加数据传递给框架。例如,我使用以下代码生成一个元素:

在这种情况下,如何为
生成标记文本

(有些关联:和。)

答案

谢谢你的回答!虽然我认为这提供了技术上正确的解决方案来正确实现我所需要的,但我认为这更直接地解决了我的问题。

您不能在
xsl:attribute
内生成标记,因为XML不允许在属性内生成未经扫描的标记。


具体地说,for
AttValue
禁止
在属性值中放置未缩放的标记,但是-如果将尖括号(以及引号中的任何符号和引号)转义为实体引用,引导程序仍将在弹出框中正确呈现html

<a href="#" data-content="This is &lt;em&gt;some&lt;/em&gt; additional &lt;a href='#'&gt;content&lt;/a&gt;.">Link</a>

要在XSLT中做到这一点,最简单的方法是使用CDATA部分:

<xsl:attribute name="data-content"
  ><![CDATA[This is <em>some</em> additional content
    &amp; a <a href="#">link</a>.]]></xsl:attribute>
一些附加内容
&;a.]>

和序列化程序将在必要时为您脱机。

< P>不是这样做的“官方”方式,但当使用它处理XML和XSLT样式表时,请考虑在样式表中使用。这些自定义元素允许您在处理过程中元素匹配时运行Python代码,并且该代码可以修改/编辑输出文档的某些部分。

我认为属性的值中不允许使用未经扫描的标记,是吗?如果您的输出是XML,则肯定不是。对,不是。请参阅。我认为HTML规范在这里更相关,因为OP正在生成:“属性值可能只包含字母(a-z和a-z)、数字(0-9)、连字符(ASCII十进制45)、句点(ASCII十进制46)、下划线(ASCII十进制95)和冒号(ASCII十进制58)。”@michael.hor257k:Hm.你是说Bootstrap对
数据内容
属性的使用是无效的HTML吗?@Jens你能指出一个例子,他们在
数据内容
属性中使用标记吗?我在你链接到的页面上没有看到。@michael.hor257k:我刚刚添加了对其他三个问题的引用,所有这些问题都有嵌入该属性的HTML示例(尤其是一个)。@Jens,是的,我更喜欢你的第一个示例,尤其是当你需要大量标记时。除了不属于XML或HTML属性值的标记外,单独的
div
更易于创建、阅读和编辑。有趣的是,小提琴部分起作用了:
不显示,但
显示。@Jens确实如此,我尝试将em改为strong,并且显示为粗体,因此看起来只是某些标记。或者这可能是bootstrap的css中的某些内容。@Jens好吧,这是JSFIDLE的错误-它使
em
呈现出了预期的效果。为了让这更有趣,我可以使用几个
CDATA
部分来包装其他XSLT元素。例如:
AttValue       ::=      '"' ([^<&"] | Reference)* '"'
                      | "'" ([^<&'] | Reference)* "'"
Reference      ::=      EntityRef | CharRef
EntityRef      ::=      '&' Name ';'
CharRef        ::=      '&#' [0-9]+ ';'
                      | '&#x' [0-9a-fA-F]+ ';'
<a href="#" data-content="This is &lt;em&gt;some&lt;/em&gt; additional &lt;a href='#'&gt;content&lt;/a&gt;.">Link</a>
<xsl:attribute name="data-content"
  ><![CDATA[This is <em>some</em> additional content
    &amp; a <a href="#">link</a>.]]></xsl:attribute>