在Mark Logic Javascript中删除重复的元素父名称

时间:2018-08-17 04:40:12

标签: javascript marklogic marklogic-dhf

我正在使用JavaScript协调Mark Logic中的数据。当前,对于我的输出,我能够显示所有子元素Activity,但问题是父项Activities也正在重复显示。

这是当前输出,其中<Activities>仅在每个Activity中出现:

<Activities datatype="array">
	<Activity>
	  <ActivityCrewSize>10</ActivityCrewSize>
	  <ActivitySeqNo>1</ActivitySeqNo>
	  <ActivityDesc/>
	</Activity>
</Activities>
<Activities datatype="array">
	<Activity>
	  <ActivityCrewSize>23</ActivityCrewSize>
	  <ActivitySeqNo>2</ActivitySeqNo>
	  <ActivityDesc/>
	</Activity>
</Activities>
<Activities datatype="array">
	<Activity>
	  <ActivityCrewSize>50</ActivityCrewSize>
	  <ActivitySeqNo>3</ActivitySeqNo>
	  <ActivityDesc/>
	</Activity>
</Activities>

这是我想要的输出,其中<Activities>仅出现一次

<Activities datatype="array">
	<Activity>
	  <ActivityCrewSize>10</ActivityCrewSize>
	  <ActivitySeqNo>1</ActivitySeqNo>
	  <ActivityDesc/>
	</Activity>
	<Activity>
	  <ActivityCrewSize>23</ActivityCrewSize>
	  <ActivitySeqNo>2</ActivitySeqNo>
	  <ActivityDesc/>
	</Activity>
	<Activity>
	  <ActivityCrewSize>50</ActivityCrewSize>
	  <ActivitySeqNo>3</ActivitySeqNo>
	  <ActivityDesc/>
	</Activity>
</Activities>

以下是我当前输出的当前代码:

obj.Activities = [];

let act = {
    '$type': 'Activity',
    '$version': '0.0.1',
     }	
	 
for (const item of activities) {

	act.ActivityCrewSize = fn.normalizeSpace(hl.elementText(item, "CrewSize", true)); 
	act.ActivitySeqNo = fn.normalizeSpace(hl.elementText(item, "SeqNo", true)); 
	act.ActivityDesc = hl.elementText(item, null, true);

	obj.Activities.push(act);	
}

return obj;

2 个答案:

答案 0 :(得分:0)

不是Java语言的人,但是如果您用另一个根元素包装您的输入,然后在Qconsole上运行以下xquery代码,则会得到所需的结果。

`

public void setSpecialTask(String... constructorArgs) {
    setTask("SpecialTask", constructorArgs); // ERROR: 'setTask(java.lang.String...)' cannot be applied to '(java.lang.String, java.lang.String[])'
}

`

答案 1 :(得分:0)

如果为每个项目创建一个单独的JavaScript对象,会产生所需的结果吗?

类似的东西:

obj.Activities = [];

for (const item of activities) {
    obj.Activities.push({
    '$type': 'Activity',
    '$version': '0.0.1',
    ActivityCrewSize: fn.normalizeSpace(hl.elementText(item, "CrewSize", true)),
    ActivitySeqNo, fn.normalizeSpace(hl.elementText(item, "SeqNo", true)),
    ActivityDesc: hl.elementText(item, null, true)
     });
}

return obj;

或者,NodeBuilder可以直接构造XML:

http://docs.marklogic.com/guide/jsref/api#id_90865