APEX 5:如何动态编辑图表xml?

APEX 5:如何动态编辑图表xml?,xml,charts,oracle-apex-5,Xml,Charts,Oracle Apex 5,我正在用几个图表(向导中的html呈现条形图)构建一个Apex应用程序。现在,我必须包括两个重要特性。根据数值更改条形图的颜色,并在条形图顶部或之后添加一些标签。 我知道这可以通过将选项“customxml”设置为YES并编辑xml来实现。问题是我无法动态地编辑它 我曾尝试在xml区域中执行函数,但它被解释为字符串(我猜该区域被视为模板)。我还尝试添加一个项目,在xml中引用它,并通过PL/SQL块将生成的文本添加到该项目中,但这也不起作用。我可以建议一种基于SVG格式理解的解决方案。下面是一个

我正在用几个图表(向导中的html呈现条形图)构建一个Apex应用程序。现在,我必须包括两个重要特性。根据数值更改条形图的颜色,并在条形图顶部或之后添加一些标签。 我知道这可以通过将选项“customxml”设置为YES并编辑xml来实现。问题是我无法动态地编辑它


我曾尝试在xml区域中执行函数,但它被解释为字符串(我猜该区域被视为模板)。我还尝试添加一个项目,在xml中引用它,并通过PL/SQL块将生成的文本添加到该项目中,但这也不起作用。

我可以建议一种基于SVG格式理解的解决方案。下面是一个示例:它包含一个带条形图和一个按钮(
变为红色
)的图表。按钮的动作是动态动作,它执行javascript代码。如果单击该按钮,其中一条将更改其颜色

它是如何工作的。SVG grafics的工作方式与HTML和CSS相同。标签
defs
svg
标签中包含样式列表,标签
g
path
rect
和许多其他包含图形,可以使用
defs
列表中的样式。您需要更改预定义的
defs
列表和图形元素

这是代码。我不是一个优秀的javascript程序员,正如您所看到的,所有重要的值都是在这里硬编码的。但我希望整个想法是明确的:

// here we get defs list. Be careful if you have several charts on the page:
var defs = document.getElementsByTagName("defs")[0];

// here we get one of color styles:
var grad1 = document.getElementById("#ac_linearGradient_75");

// make a copy of the style:
var grad2 = grad1.cloneNode(true);

// and change its ID:
grad2.id = grad2.id + "_copy";

// then define new color:
grad2.firstChild.setAttribute("style", "stop-color:rgb(209, 29, 29);stop-opacity:0.9");

// append to the defs list:
defs.appendChild(grad2);

// get one of bars by ID:    
var bar1 = document.getElementById("#ac_path_8o");

// set new filling style:
bar1.setAttribute("fill", "url(##ac_linearGradient_75_copy)");

在动态动作的属性中,您可以设置属性
在页面加载时触发
——页面加载后代码将自动工作。同样,在javascript代码中,您可以从项目中获取值,将它们放入图表中,等等。

谢谢您的回答,我将对此进行研究。我想你也可以用这种方法在图表中添加一些标签。@Alexsen我仍然不知道任何图表如何在图表中添加文本。但是您可以使用
text
标记添加文本。在这里可以看到更多:我无法从html文档中获取任何条,因为它们唯一的标记是一个类,并且名称中有一个空格,因此我无法获取元素。这是个好主意,它对我不起作用,但对其他人也可能起作用。@Alexsen类名中不能有空格。如果看到空格,这是两个(或更多)类。无论如何,如果你想尝试这种方式,你应该创建另一个关于这个新问题的问题。我不熟悉HTML/CSS/javascript/SVG,我只知道几个技巧。