XContainerWrapper
using System.Collections.Generic;
using System.Xml.Linq;
namespace Newtonsoft.Json.Converters
{
internal class XContainerWrapper : XObjectWrapper
{
private List<IXmlNode> _childNodes;
private XContainer Container => (XContainer)base.WrappedNode;
public override List<IXmlNode> ChildNodes {
get {
if (_childNodes == null) {
if (!HasChildNodes)
_childNodes = XmlNodeConverter.EmptyChildNodes;
else {
_childNodes = new List<IXmlNode>();
foreach (XNode item in Container.Nodes()) {
_childNodes.Add(WrapNode(item));
}
}
}
return _childNodes;
}
}
protected virtual bool HasChildNodes => Container.LastNode != null;
public override IXmlNode ParentNode {
get {
if (Container.Parent == null)
return null;
return WrapNode(Container.Parent);
}
}
public XContainerWrapper(XContainer container)
: base(container)
{
}
internal static IXmlNode WrapNode(XObject node)
{
XDocument document;
if ((document = (node as XDocument)) != null)
return new XDocumentWrapper(document);
XElement element;
if ((element = (node as XElement)) != null)
return new XElementWrapper(element);
XContainer container;
if ((container = (node as XContainer)) != null)
return new XContainerWrapper(container);
XProcessingInstruction processingInstruction;
if ((processingInstruction = (node as XProcessingInstruction)) != null)
return new XProcessingInstructionWrapper(processingInstruction);
XText text;
if ((text = (node as XText)) != null)
return new XTextWrapper(text);
XComment text2;
if ((text2 = (node as XComment)) != null)
return new XCommentWrapper(text2);
XAttribute attribute;
if ((attribute = (node as XAttribute)) != null)
return new XAttributeWrapper(attribute);
XDocumentType documentType;
if ((documentType = (node as XDocumentType)) != null)
return new XDocumentTypeWrapper(documentType);
return new XObjectWrapper(node);
}
public override IXmlNode AppendChild(IXmlNode newChild)
{
Container.Add(newChild.WrappedNode);
_childNodes = null;
return newChild;
}
}
}