private static XmlElement CreateNullElement(string name, XmlValueOption option, XmlDocument xmlResult) { switch (option) { case XmlValueOption.AbsentOnNull: return null; case XmlValueOption.EmptyOnNull: return xmlResult.CreateElement(name); case XmlValueOption.NilOnNoContent: case XmlValueOption.NilOnNull: { XmlElement elem = xmlResult.CreateElement(name); elem.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); elem.SetAttribute("xsi:nil", "true"); return elem; } case XmlValueOption.NullOnNull: { XmlElement elem = xmlResult.CreateElement(name); elem.InnerText = "NULL"; // ??????? return elem; } default: throw new InvalidOperationException(); } }
public static object XmlValueElem([Implict] Executive engine, String name, object value, XmlValueOption option) { QueryNode.LispProcessingContext owner = (QueryNode.LispProcessingContext)engine.Owner; name = XmlConvert.EncodeLocalName(name); XmlDocument xmlResult = owner.QueryContext.XmlResult; if (value == null || value == Undefined.Value) return CreateNullElement(name, option, xmlResult); else if (value is XmlNodeList) { XmlNodeList nodeList = (XmlNodeList)value; if (nodeList.Count == 0) return CreateNullElement(name, option, xmlResult); else { XmlElement elem = xmlResult.CreateElement(name); foreach (XmlNode node in nodeList) { XmlNode child; if (node.OwnerDocument != elem.OwnerDocument) child = xmlResult.ImportNode(node, true); else child = node.CloneNode(true); elem.AppendChild(child); } return elem; } } else { XmlNode node; if (value is XmlNode) node = (XmlNode)value; else node = XmlDataAccessor.Serialize(xmlResult, value); XmlElement elem = xmlResult.CreateElement(name); XmlNode child; if (node.OwnerDocument != elem.OwnerDocument) child = xmlResult.ImportNode(node, true); else child = node.CloneNode(true); elem.AppendChild(child); return elem; } }
public static object XmlValueAtt([Implict] Executive engine, object node, string name, object value, XmlValueOption option) { XmlElement elem = (XmlElement)node; if (value == null || value == Undefined.Value || (value.Equals(String.Empty) && option == XmlValueOption.NilOnNoContent)) switch (option) { case XmlValueOption.AbsentOnNull: break; case XmlValueOption.EmptyOnNull: elem.SetAttribute(name, ""); break; default: throw new ESQLException(Properties.Resources.InvalidOptionForXmlAttribute, name); } else elem.SetAttribute(XmlConvert.EncodeLocalName(name), XmlDataAccessor.Serialize(value)); return elem; }