示例#1
0
        private OpenXmlElement CreateChildElement()
        {
            Debug.Assert(_elementStack.Count > 0);
            Debug.Assert(_xmlReader != null);

            OpenXmlElement element = _elementStack.Peek();

            // AlternateContent / Choice / Fallback needs special treatment
            // The ElementFactory( ) of the Choice / Fallback depends on the parent of AlternateContentChoice
            // TODO: find a better solution
            if (element is AlternateContentChoice || element is AlternateContentFallback)
            {
                if (_elementStack.Count > 2)
                {
                    OpenXmlElement topElement = _elementStack.Pop();
                    OpenXmlElement acElement  = _elementStack.Pop();

                    OpenXmlElement parentsParent = _elementStack.Peek().CloneNode(false);

                    _elementStack.Push(acElement);
                    _elementStack.Push(topElement);

                    element   = topElement.CloneNode(false);
                    acElement = new AlternateContent();
                    acElement.AppendChild(element);
                    parentsParent.AppendChild(acElement);
                }
            }

            return(element.ElementFactory(_xmlReader));
        }
        private OpenXmlElement CreateChildElement()
        {
            Debug.Assert(this._elementStack.Count > 0);
            Debug.Assert(this._xmlReader != null);

            OpenXmlElement element = this._elementStack.Peek();

            // AlternateContent / Choice / Fallback needs special treatment
            // The ElementFactory( ) of the Choice / Fallback depends on the parent of AlternateContentChoice 
            // TODO: find a better solution
            if (element is AlternateContentChoice || element is AlternateContentFallback)
            {
                if ( this._elementStack.Count > 2 )
                {
                    OpenXmlElement topElement = this._elementStack.Pop( );
                    OpenXmlElement acElement = this._elementStack.Pop( );
                    
                    OpenXmlElement parentsParent = this._elementStack.Peek( ).CloneNode(false);

                    this._elementStack.Push( acElement );
                    this._elementStack.Push( topElement );

                    element = topElement.CloneNode( false );
                    acElement = new AlternateContent( );
                    acElement.AppendChild( element );
                    parentsParent.AppendChild( acElement );
                }
            }

            return element.ElementFactory(this._xmlReader);
        }