@@ -334,7 +334,7 @@ public bool IsNode(TLinkAddress possibleXmlNode)
334334 var isAttributeNode = IsAttributeNode ( possibleXmlNode ) ;
335335 return isElement || isTextNode || isAttributeNode ;
336336 }
337-
337+
338338 #region Document
339339
340340 public IList < TLinkAddress > GetDocumentChildNodeLinkAddresses ( TLinkAddress documentLinkAddress )
@@ -541,13 +541,13 @@ public TLinkAddress CreateTextNode(string text)
541541
542542 public void EnsureIsTextNode ( TLinkAddress possibleTextNodeLinkAddress )
543543 {
544- if ( ! IsTextNode ( possibleTextNodeLinkAddress ) )
544+ if ( ! IsTextNode ( possibleTextNodeLinkAddress ) )
545545 {
546546 throw new ArgumentException ( $ "{ possibleTextNodeLinkAddress } is not a text node link address") ;
547547 }
548548 }
549-
550-
549+
550+
551551 public string GetTextNode ( TLinkAddress textNodeLinkAddress )
552552 {
553553 EnsureIsTextNode ( textNodeLinkAddress ) ;
@@ -565,61 +565,14 @@ public bool IsAttributeNode(TLinkAddress attributeNodeLinkAddress)
565565 return EqualityComparer . Equals ( possibleAttributeNodeType , AttributeNodeType ) ;
566566 }
567567
568- #endregion
569-
570- #region ElementNode
571-
572- public TLinkAddress CreateElement ( string name , TLinkAddress childrenNodesSequenceLinkAddress )
573- {
574- var elementLinkAddress = CreateElement ( name ) ;
575- var elementChildrenNodesLinkAddress = CreateElementChildrenNodes ( elementLinkAddress , childrenNodesSequenceLinkAddress ) ;
576- Links . GetOrCreate ( elementLinkAddress , elementChildrenNodesLinkAddress ) ;
577- return elementLinkAddress ;
578- }
579-
580- public bool IsElementChildrenNodes ( TLinkAddress possibleElementChildrenNodesLinkAddress )
581- {
582- var possibleElementChildrenNodesType = Links . GetSource ( possibleElementChildrenNodesLinkAddress ) ;
583- return EqualityComparer . Equals ( possibleElementChildrenNodesType , ElementChildrenNodesType ) ;
584- }
585-
586- public TLinkAddress GetElementChildrenNodesSequence ( TLinkAddress childrenNodesLinkAddress )
587- {
588- return Links . GetTarget ( childrenNodesLinkAddress ) ;
589- }
590-
591- public IList < TLinkAddress > GetElementChildrenNodes ( TLinkAddress elementLinkAddress )
568+ public void EnsureIsAttributeNode ( TLinkAddress possibleAttributeNodeLinkAddress )
592569 {
593- if ( ! IsDocument ( elementLinkAddress ) )
570+ if ( ! IsAttributeNode ( possibleAttributeNodeLinkAddress ) )
594571 {
595- throw new ArgumentException ( "The passed link address is not an element link address." , nameof ( elementLinkAddress ) ) ;
572+ throw new AggregateException ( $ " { possibleAttributeNodeLinkAddress } is not an attribute node link address" ) ;
596573 }
597- var childrenNodes = new List < TLinkAddress > ( ) ;
598- Links . Each ( new Link < TLinkAddress > ( elementLinkAddress , Links . Constants . Any ) , elementToAnyLink =>
599- {
600- var possibleChildrenNodesLinkAddress = Links . GetTarget ( elementToAnyLink ) ;
601- if ( ! IsDocumentChildrenNodesLinkAddress ( possibleChildrenNodesLinkAddress ) )
602- {
603- return Links . Constants . Continue ;
604- }
605- var childrenNodesSequenceLinkAddress = GetDocumentChildrenNodesSequence ( possibleChildrenNodesLinkAddress ) ;
606- RightSequenceWalker < TLinkAddress > childrenNodesRightSequenceWalker = new ( Links , new DefaultStack < TLinkAddress > ( ) , IsNode ) ;
607- childrenNodes = childrenNodesRightSequenceWalker . Walk ( childrenNodesSequenceLinkAddress ) . ToList ( ) ;
608- return Links . Constants . Continue ;
609- } ) ;
610- return childrenNodes ;
611574 }
612575
613- public bool IsElementNode ( TLinkAddress elementLinkAddress )
614- {
615- var possibleElementType = Links . GetSource ( elementLinkAddress ) ;
616- return EqualityComparer . Equals ( possibleElementType , ElementType ) ;
617- }
618-
619- #endregion
620-
621- #region AttributeNode
622-
623576 private TLinkAddress CreateAttributeNode ( XmlAttribute xmlAttribute )
624577 {
625578 var attributeName = _stringToUnicodeSequenceConverter . Convert ( xmlAttribute . Name ) ;
@@ -671,6 +624,57 @@ public string GetAttributeValue(TLinkAddress attributeLinkAddress)
671624
672625 #endregion
673626
627+ #region ElementNode
628+
629+ public TLinkAddress CreateElement ( string name , TLinkAddress childrenNodesSequenceLinkAddress )
630+ {
631+ var elementLinkAddress = CreateElement ( name ) ;
632+ var elementChildrenNodesLinkAddress = CreateElementChildrenNodes ( elementLinkAddress , childrenNodesSequenceLinkAddress ) ;
633+ Links . GetOrCreate ( elementLinkAddress , elementChildrenNodesLinkAddress ) ;
634+ return elementLinkAddress ;
635+ }
636+
637+ public bool IsElementChildrenNodes ( TLinkAddress possibleElementChildrenNodesLinkAddress )
638+ {
639+ var possibleElementChildrenNodesType = Links . GetSource ( possibleElementChildrenNodesLinkAddress ) ;
640+ return EqualityComparer . Equals ( possibleElementChildrenNodesType , ElementChildrenNodesType ) ;
641+ }
642+
643+ public TLinkAddress GetElementChildrenNodesSequence ( TLinkAddress childrenNodesLinkAddress )
644+ {
645+ return Links . GetTarget ( childrenNodesLinkAddress ) ;
646+ }
647+
648+ public IList < TLinkAddress > GetElementChildrenNodes ( TLinkAddress elementLinkAddress )
649+ {
650+ if ( ! IsDocument ( elementLinkAddress ) )
651+ {
652+ throw new ArgumentException ( "The passed link address is not an element link address." , nameof ( elementLinkAddress ) ) ;
653+ }
654+ var childrenNodes = new List < TLinkAddress > ( ) ;
655+ Links . Each ( new Link < TLinkAddress > ( elementLinkAddress , Links . Constants . Any ) , elementToAnyLink =>
656+ {
657+ var possibleChildrenNodesLinkAddress = Links . GetTarget ( elementToAnyLink ) ;
658+ if ( ! IsDocumentChildrenNodesLinkAddress ( possibleChildrenNodesLinkAddress ) )
659+ {
660+ return Links . Constants . Continue ;
661+ }
662+ var childrenNodesSequenceLinkAddress = GetDocumentChildrenNodesSequence ( possibleChildrenNodesLinkAddress ) ;
663+ RightSequenceWalker < TLinkAddress > childrenNodesRightSequenceWalker = new ( Links , new DefaultStack < TLinkAddress > ( ) , IsNode ) ;
664+ childrenNodes = childrenNodesRightSequenceWalker . Walk ( childrenNodesSequenceLinkAddress ) . ToList ( ) ;
665+ return Links . Constants . Continue ;
666+ } ) ;
667+ return childrenNodes ;
668+ }
669+
670+ public bool IsElementNode ( TLinkAddress elementLinkAddress )
671+ {
672+ var possibleElementType = Links . GetSource ( elementLinkAddress ) ;
673+ return EqualityComparer . Equals ( possibleElementType , ElementType ) ;
674+ }
675+
676+ #endregion
677+
674678 #endregion
675679 }
676680}
0 commit comments