首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT -CSS的所有元素属性的组合-样式表

XSLT -CSS的所有元素属性的组合-样式表
EN

Stack Overflow用户
提问于 2015-09-22 12:19:50
回答 1查看 103关注 0票数 0

我想知道是否可以通过XSLT完成以下工作。我对它还挺陌生的。

假设我有一个具有各种可能属性的元素。对于每个属性组合,我想要显示快速内容。

具有不同属性的元素:

代码语言:javascript
复制
<!ATTLIST foo
     apple CDATA #IMPLIED 
     peach CDATA #IMPLIED
     kiwi  CDATA #IMPLIED
     ...
>

所需的CSS:

代码语言:javascript
复制
foo[apple]:before {
    content: '@apple: ' attr(apple);
}
foo[peach]:before {
    content: '@peach: ' attr(peach);
}
foo[kiwi]:before {
    content: '@kiwi: ' attr(kiwi);
}
foo[apple][peach]:before {
    content: '@apple: ' attr(apple) ' @peach: ' attr(peach);
}
foo[apple][kiwi]:before {
    content: '@apple: ' attr(apple) ' @kiwi: ' attr(kiwi);
}
foo[peach][kiwi]:before {
    content: '@apple: ' attr(peach) ' @kiwi: ' attr(kiwi);
}
foo[apple][peach][kiwi]:before {
    content: '@apple: ' attr(apple) ' @peach: ' attr(peach) ' @kiwi: ' attr(kiwi);
}

顺序并不重要,但每个组合应该只发生一次。有些元素有五个以上的属性,因此通过XSLT获得CSS的所有组合将是非常有帮助的。不幸的是,在我的例子中,js不是一个选项,输出必须是普通的CSS2。

我无法思考如何解决这个问题,任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 12:52:30

对于这类问题,XSLT是一个糟糕的选择。最好是使用通用的编程语言。这些组合可以用一个位字段来表示,其中包含每个属性的位。然后,您可以通过数字1到2^n-1来枚举所有组合。

下面是一个Javascript示例:

代码语言:javascript
复制
function generateCss(items) {
  var n = items.length;
  var m = 1 << n; // 2^n
  
  document.write('<pre>');

  for (var i = 1; i < m; i++) {
    var subset = items.filter(function(item, index) {
      // (1 << index) is the bit representing the current item.
      return i & (1 << index);
    });

    var attrs = subset.map(function(item) {
      return '[' + item + ']';
    }).join('');

    var content = subset.map(function(item, index) {
      return "'" + (index == 0 ? '' : ' ') + '@' + item +
             ": ' attr(" + item + ")";
    }).join(' ');

    document.write(
      'foo' + attrs + ':before {\n' +
      '  content: ' + content + ';\n' +
      '}\n');
  }

  document.write('</pre>');
}

generateCss([ 'apple', 'peach', 'kiwi' ]);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32716699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档