diff --git a/src/zeroline/foundation.ts b/src/zeroline/foundation.ts index 672de12d0..f944231de 100644 --- a/src/zeroline/foundation.ts +++ b/src/zeroline/foundation.ts @@ -29,6 +29,19 @@ function isMultiparent(element: Element, iedName: string): boolean { ); } +function isUniquechild(element: Element, iedName: string): boolean { + const isUnique = + (Array.from(element.children)).filter(element => + containsReference(element, iedName) + ).length === 1; + + if (!isUnique) return false; + if (element.parentNode instanceof XMLDocument) return isUnique; + if (isUnique) return isUniquechild(element.parentElement!, iedName); + + return true; +} + function isReference(element: Element, iedName: string): boolean { return ( (Array.from(element.children)).filter( @@ -50,9 +63,9 @@ export function attachedIeds(element: Element): Element[] { const iedName = ied.getAttribute('name')!; if ( (isMultiparent(element, iedName) && - !isMultiparent(element.parentElement!, iedName)) || + isUniquechild(element.parentElement!, iedName)) || (isReference(element, iedName) && - !isMultiparent(element.parentElement!, iedName)) + isUniquechild(element.parentElement!, iedName)) ) attachedIeds.push(ied); });