示例#1
0
        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();
            }
        }
示例#2
0
 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;
     }
 }
示例#3
0
        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;
        }