在面包屑渲染中包含特定的属性或子元素文本

时间:2019-01-08 01:37:07

标签: oxygenxml

在作者内部显示面包屑和I know you can modify its display to either some other static text or localisation,但我想知道是否可以动态显示属性或动态执行其他特定于上下文的xpath。


作为测试,我可以使用本地化编辑器变量${i18n()}更改面包屑。

cc_config.xml

<elementRenderings platform="webapp">
    <render element="num" as="${i18n(test)}" annotation="${i18n(test)}"/>

translation-cc.xml

<key value="test">
    <comment></comment>
    <val lang="en_US">Year</val>

“年份”实际上是一个num元素。


但是,尝试使用任何其他变量,甚至是像${cf}${tp}这样的“更静态”变量,都只是按字面意义呈现变量文本,而不是对其求值。

cc_config.xml

<elementRenderings platform="webapp">
    <render element="paragraph" as="${xpath_eval(./@eId)}" annotation="${xpath_eval(./@eId)}"/>
    <render element="p" as="${tp}" annotation="${tp}"/>

(段落确实具有eId属性)


如您所见,我尝试使用annotation;但是这些工具提示也只是按字面意义显示变量。
我还摆弄了很多xpath的东西,例如@eId / .@eId / /@eId,但我认为在使用内容完成配置文件方面对编辑器变量存在一些限制。 / p>

想法是正确的,但是我做错了,还是不是正确的方法,但是还有其他方法可以影响面包屑?也许有架构?

1 个答案:

答案 0 :(得分:0)

cc_config.xml文件中的元素显示名称不支持大多数编辑器变量。其中大多数,例如${cf}(当前文件)和${tp}(总页数),在呈现元素名称时都没有意义。

xpath_eval很有道理-元素的显示名称可能取决于其属性(例如@id属性),元素在文档中的索引(例如'Section 3')等。我们已经为这种情况注册了功能请求,我对此表示赞同。

作为部分解决方法,您可以使用JS API根据元素的原始名称及其属性来计算元素的显示名称:

goog.events.listen(workspace, sync.api.Workspace.EventType.BEFORE_EDITOR_LOADED, function(e) {
  e.options.elementNameEnhancer = function(elemName, attrs) {
    var displayString = elemName;
    var attr = attrs['id'];
    if (attr) {
      displayString += ' (#' + attr.attributeValue + ')';
    }
    return displayString;
  };
});