public void TestGetAttribute() { DomNodeType type = new DomNodeType("child"); AttributeInfo info = GetIntAttribute("int"); type.Define(info); DomNode test = new DomNode(type); Assert.True(test.IsAttributeDefault(info)); Assert.Null(test.GetLocalAttribute(info)); Assert.False(test.IsAttributeSet(info)); test.SetAttribute(info, 2); Assert.AreEqual(test.GetAttribute(info), 2); Assert.AreEqual(test.GetLocalAttribute(info), 2); Assert.False(test.IsAttributeDefault(info)); Assert.True(test.IsAttributeSet(info)); test.SetAttribute(info, null); Assert.True(test.IsAttributeDefault(info)); Assert.Null(test.GetLocalAttribute(info)); Assert.False(test.IsAttributeSet(info)); test.SetAttribute(info, 0); Assert.AreEqual(test.GetAttribute(info), 0); Assert.True(test.IsAttributeDefault(info)); Assert.AreEqual(test.GetLocalAttribute(info), 0); Assert.True(test.IsAttributeSet(info)); }
/// <summary> /// OnNodeSet /// </summary> protected override void OnNodeSet() { if (DomNode.IsAttributeDefault(SledLuaSchema.SledLuaProjectFilesWatchType.guidAttribute)) { Guid = SledUtil.MakeXmlSafeGuid(); } base.OnNodeSet(); }
/// <summary> /// Appends the attribute, if it's not the default value, in the format ", {name}={value}". /// If the value is an integer, then no quotes are used. /// If the value is a bool, then true or false are written out, without quotes. /// Otherwise, the value is enclosed in quotes.</summary> /// <param name="node">Node whose attributes is written</param> /// <param name="name">Attribute name</param> /// <param name="lineBuilder">String builder to create string attribute data</param> private static void WriteAttribute(DomNode node, string name, StringBuilder lineBuilder) { AttributeInfo attributeInfo = node.Type.GetAttributeInfo(name); if (!node.IsAttributeDefault(attributeInfo)) { object attribute = node.GetAttribute(attributeInfo); if (attribute is int) { lineBuilder.AppendFormat(", {0}={1}", name, ((int)attribute).ToString()); } else if (attribute is bool) { lineBuilder.AppendFormat(", {0}={1}", name, (bool)attribute == true ? "true" : "false"); } else { lineBuilder.AppendFormat(", {0}=\"{1}\"", name, attribute); } } }
/// <summary> /// Appends the attribute, if it's not the default value, in the format ", {name}={value}". /// If the value is an integer, then no quotes are used. /// If the value is a bool, then true or false are written out, without quotes. /// Otherwise, the value is enclosed in quotes.</summary> /// <param name="node">Node whose attributes is written</param> /// <param name="name">Attribute name</param> /// <param name="lineBuilder">String builder to create string attribute data</param> private static void WriteAttribute(DomNode node, string name, StringBuilder lineBuilder) { AttributeInfo attributeInfo = node.Type.GetAttributeInfo(name); if (!node.IsAttributeDefault(attributeInfo)) { object attribute = node.GetAttribute(attributeInfo); if (attribute is int) lineBuilder.AppendFormat(", {0}={1}", name, ((int)attribute).ToString()); else if (attribute is bool) lineBuilder.AppendFormat(", {0}={1}", name, (bool)attribute == true ? "true" : "false"); else lineBuilder.AppendFormat(", {0}=\"{1}\"", name, attribute); } }
/// <summary> /// Determines whether the attribute's value should be persisted</summary> /// <returns>true if the attribute's value should be persisted; otherwise, false.</returns> protected virtual bool ShouldWriteAttribute(DomNode node, AttributeInfo attributeInfo) { return PersistDefaultAttributes || !node.IsAttributeDefault(attributeInfo); }
/// <summary> /// Determines whether the attribute's value should be persisted</summary> /// <param name="node">Node with attribute</param> /// <param name="attributeInfo">AttributeInfo for attribute</param> /// <returns>True iff attribute's value should be persisted</returns> protected virtual bool ShouldWriteAttribute(DomNode node, AttributeInfo attributeInfo) { return(PersistDefaultAttributes || !node.IsAttributeDefault(attributeInfo)); }
public void TestSetAttribute() { DomNodeType type = new DomNodeType("child"); AttributeInfo info = GetIntAttribute("int"); type.Define(info); DomNode test = new DomNode(type); Assert.False(test.IsAttributeSet(info)); test.SetAttribute(info, 2); Assert.AreEqual(test.GetAttribute(info), 2); Assert.AreEqual(test.GetLocalAttribute(info), 2); Assert.True(test.IsAttributeSet(info)); test.SetAttribute(info, null); Assert.True(test.IsAttributeDefault(info)); Assert.Null(test.GetLocalAttribute(info)); Assert.False(test.IsAttributeSet(info)); }
private void WriteElement(DomNode node, XmlWriter writer) { // If writing the project settings file... if (!m_bWritingUserSettings) { // Don't save types that are not supposed to be saved if (s_lstExcludeDomNodeTypes.Contains(node.Type)) { return; } } var elementNs = m_typeCollection.TargetNamespace; var index = node.ChildInfo.Name.LastIndexOf(':'); if (index >= 0) { elementNs = node.ChildInfo.Name.Substring(0, index); } string elementPrefix; // is this the root DomNode (the one passed Write, above)? if (node == m_root) { elementPrefix = m_typeCollection.GetPrefix(elementNs) ?? GeneratePrefix(elementNs); writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNs); // define the xsi namespace writer.WriteAttributeString("xmlns", "xsi", null, XmlSchema.InstanceNamespace); // define schema namespaces foreach (var name in m_typeCollection.Namespaces) { if (string.Compare(name.Name, elementPrefix) != 0) { writer.WriteAttributeString("xmlns", name.Name, null, name.Namespace); } } } else { // not the root, so all schema namespaces have been defined elementPrefix = writer.LookupPrefix(elementNs) ?? GeneratePrefix(elementNs); writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNs); } // write type name if this is a polymorphic type var type = node.Type; if (node.ChildInfo.Type != type) { var name = type.Name; index = name.LastIndexOf(':'); if (index >= 0) { var typeName = name.Substring(index + 1, type.Name.Length - index - 1); var typeNs = name.Substring(0, index); var typePrefix = writer.LookupPrefix(typeNs); if (typePrefix == null) { typePrefix = GeneratePrefix(typeNs); writer.WriteAttributeString("xmlns", typePrefix, null, typeNs); } name = typeName; if (typePrefix != string.Empty) { name = typePrefix + ":" + typeName; } } writer.WriteAttributeString("xsi", "type", XmlSchema.InstanceNamespace, name); } // write attributes AttributeInfo valueAttribute = null; foreach (var attributeInfo in type.Attributes) { // if attribute is required, or not the default, write it if (/*attributeInfo.Required ||*/ !node.IsAttributeDefault(attributeInfo)) { if (attributeInfo.Name == string.Empty) { valueAttribute = attributeInfo; } else { var value = node.GetAttribute(attributeInfo); string valueString = null; if (attributeInfo.Type.Type == AttributeTypes.Reference) { // if reference is a valid node, convert to string var refNode = value as DomNode; if (refNode != null) { valueString = GetNodeReferenceString(refNode, m_root); } } if (valueString == null) { valueString = attributeInfo.Type.Convert(value); } var bWriteAttribute = true; if (!m_bWritingUserSettings) { bWriteAttribute = !s_lstExcludeAttributes.Contains(attributeInfo.Name); } if (bWriteAttribute) { writer.WriteAttributeString(attributeInfo.Name, valueString); } } } } // write value if not the default if (valueAttribute != null) { var value = node.GetAttribute(valueAttribute); writer.WriteString(valueAttribute.Type.Convert(value)); } // write child elements foreach (var childInfo in type.Children) { if (childInfo.IsList) { foreach (var child in node.GetChildList(childInfo)) { WriteElement(child, writer); } } else { var child = node.GetChild(childInfo); if (child != null) { WriteElement(child, writer); } } } writer.WriteEndElement(); }
/// <summary> /// Writes the element corresponding to the DomNode</summary> /// <param name="node">DomNode to write</param> protected virtual void WriteElement(DomNode node, XmlWriter writer) { string elementNS = m_typeCollection.TargetNamespace; int index = node.ChildInfo.Name.LastIndexOf(':'); if (index >= 0) { elementNS = node.ChildInfo.Name.Substring(0, index); } string elementPrefix = string.Empty; // is this the root DomNode? if (node.Parent == null) { elementPrefix = m_typeCollection.GetPrefix(elementNS); if (elementPrefix == null) { elementPrefix = GeneratePrefix(elementNS); } writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNS); // define the xsi namespace writer.WriteAttributeString("xmlns", "xsi", null, XmlSchema.InstanceNamespace); // define schema namespaces foreach (XmlQualifiedName name in m_typeCollection.Namespaces) { if (name.Name != elementPrefix) // don't redefine the element namespace { writer.WriteAttributeString("xmlns", name.Name, null, name.Namespace); } } } else { // not the root, so all schema namespaces have been defined elementPrefix = writer.LookupPrefix(elementNS); if (elementPrefix == null) { elementPrefix = GeneratePrefix(elementNS); } writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNS); } // write type name if this is a polymorphic type DomNodeType type = node.Type; if (node.ChildInfo.Type != type) { string name = type.Name; index = name.LastIndexOf(':'); if (index >= 0) { string typeName = name.Substring(index + 1, type.Name.Length - index - 1); string typeNS = name.Substring(0, index); string typePrefix = writer.LookupPrefix(typeNS); if (typePrefix == null) { typePrefix = GeneratePrefix(typeNS); writer.WriteAttributeString("xmlns", typePrefix, null, typeNS); } name = typeName; if (typePrefix != string.Empty) { name = typePrefix + ":" + typeName; } } writer.WriteAttributeString("xsi", "type", XmlSchema.InstanceNamespace, name); } // write attributes AttributeInfo valueAttribute = null; foreach (AttributeInfo attributeInfo in type.Attributes) { // if attribute is required, or not the default, write it if (/*attributeInfo.Required ||*/ !node.IsAttributeDefault(attributeInfo)) { if (attributeInfo.Name == string.Empty) { valueAttribute = attributeInfo; } else { object value = node.GetAttribute(attributeInfo); string valueString = null; if (attributeInfo.Type.Type == AttributeTypes.Reference) { // if reference is a valid node, convert to string DomNode refNode = value as DomNode; if (refNode != null) { valueString = GetNodeReferenceString(refNode, m_root, m_uri); } } if (valueString == null) { valueString = attributeInfo.Type.Convert(value); } writer.WriteAttributeString(attributeInfo.Name, valueString); } } } // write value if not the default if (valueAttribute != null) { object value = node.GetAttribute(valueAttribute); writer.WriteString(valueAttribute.Type.Convert(value)); } // write child elements foreach (ChildInfo childInfo in type.Children) { if (childInfo.IsList) { foreach (DomNode child in node.GetChildList(childInfo)) { WriteElement(child, writer); } } else { DomNode child = node.GetChild(childInfo); if (child != null) { WriteElement(child, writer); } } } writer.WriteEndElement(); }
/// <summary> /// Writes the element corresponding to the DomNode</summary> /// <param name="node">DomNode to write</param> protected virtual void WriteElement(DomNode node, XmlWriter writer) { string elementNS = m_typeCollection.TargetNamespace; int index = node.ChildInfo.Name.LastIndexOf(':'); if (index >= 0) elementNS = node.ChildInfo.Name.Substring(0, index); string elementPrefix = string.Empty; // is this the root DomNode? if (node.Parent == null) { elementPrefix = m_typeCollection.GetPrefix(elementNS); if (elementPrefix == null) elementPrefix = GeneratePrefix(elementNS); writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNS); // define the xsi namespace writer.WriteAttributeString("xmlns", "xsi", null, XmlSchema.InstanceNamespace); // define schema namespaces foreach (XmlQualifiedName name in m_typeCollection.Namespaces) if (name.Name != elementPrefix) // don't redefine the element namespace writer.WriteAttributeString("xmlns", name.Name, null, name.Namespace); } else { // not the root, so all schema namespaces have been defined elementPrefix = writer.LookupPrefix(elementNS); if (elementPrefix == null) elementPrefix = GeneratePrefix(elementNS); writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNS); } // write type name if this is a polymorphic type DomNodeType type = node.Type; if (node.ChildInfo.Type != type) { string name = type.Name; index = name.LastIndexOf(':'); if (index >= 0) { string typeName = name.Substring(index + 1, type.Name.Length - index - 1); string typeNS = name.Substring(0, index); string typePrefix = writer.LookupPrefix(typeNS); if (typePrefix == null) { typePrefix = GeneratePrefix(typeNS); writer.WriteAttributeString("xmlns", typePrefix, null, typeNS); } name = typeName; if (typePrefix != string.Empty) name = typePrefix + ":" + typeName; } writer.WriteAttributeString("xsi", "type", XmlSchema.InstanceNamespace, name); } // write attributes AttributeInfo valueAttribute = null; foreach (AttributeInfo attributeInfo in type.Attributes) { // if attribute is required, or not the default, write it if (/*attributeInfo.Required ||*/ !node.IsAttributeDefault(attributeInfo)) { if (attributeInfo.Name == string.Empty) { valueAttribute = attributeInfo; } else { object value = node.GetAttribute(attributeInfo); string valueString = null; if (attributeInfo.Type.Type == AttributeTypes.Reference) { // if reference is a valid node, convert to string DomNode refNode = value as DomNode; if (refNode != null) valueString = GetNodeReferenceString(refNode, m_root, m_uri); } if (valueString == null) valueString = attributeInfo.Type.Convert(value); writer.WriteAttributeString(attributeInfo.Name, valueString); } } } // write value if not the default if (valueAttribute != null) { object value = node.GetAttribute(valueAttribute); writer.WriteString(valueAttribute.Type.Convert(value)); } // write child elements foreach (ChildInfo childInfo in type.Children) { if (childInfo.IsList) { foreach (DomNode child in node.GetChildList(childInfo)) WriteElement(child, writer); } else { DomNode child = node.GetChild(childInfo); if (child != null) WriteElement(child, writer); } } writer.WriteEndElement(); }
private void WriteElement(DomNode node, XmlWriter writer) { // If writing the project settings file... if (!m_bWritingUserSettings) { // Don't save types that are not supposed to be saved if (s_lstExcludeDomNodeTypes.Contains(node.Type)) return; } var elementNs = m_typeCollection.TargetNamespace; var index = node.ChildInfo.Name.LastIndexOf(':'); if (index >= 0) elementNs = node.ChildInfo.Name.Substring(0, index); string elementPrefix; // is this the root DomNode (the one passed Write, above)? if (node == m_root) { elementPrefix = m_typeCollection.GetPrefix(elementNs) ?? GeneratePrefix(elementNs); writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNs); // define the xsi namespace writer.WriteAttributeString("xmlns", "xsi", null, XmlSchema.InstanceNamespace); // define schema namespaces foreach (var name in m_typeCollection.Namespaces) { if (string.Compare(name.Name, elementPrefix) != 0) writer.WriteAttributeString("xmlns", name.Name, null, name.Namespace); } } else { // not the root, so all schema namespaces have been defined elementPrefix = writer.LookupPrefix(elementNs) ?? GeneratePrefix(elementNs); writer.WriteStartElement(elementPrefix, node.ChildInfo.Name, elementNs); } // write type name if this is a polymorphic type var type = node.Type; if (node.ChildInfo.Type != type) { var name = type.Name; index = name.LastIndexOf(':'); if (index >= 0) { var typeName = name.Substring(index + 1, type.Name.Length - index - 1); var typeNs = name.Substring(0, index); var typePrefix = writer.LookupPrefix(typeNs); if (typePrefix == null) { typePrefix = GeneratePrefix(typeNs); writer.WriteAttributeString("xmlns", typePrefix, null, typeNs); } name = typeName; if (typePrefix != string.Empty) name = typePrefix + ":" + typeName; } writer.WriteAttributeString("xsi", "type", XmlSchema.InstanceNamespace, name); } // write attributes AttributeInfo valueAttribute = null; foreach (var attributeInfo in type.Attributes) { // if attribute is required, or not the default, write it if (/*attributeInfo.Required ||*/ !node.IsAttributeDefault(attributeInfo)) { if (attributeInfo.Name == string.Empty) { valueAttribute = attributeInfo; } else { var value = node.GetAttribute(attributeInfo); string valueString = null; if (attributeInfo.Type.Type == AttributeTypes.Reference) { // if reference is a valid node, convert to string var refNode = value as DomNode; if (refNode != null) valueString = GetNodeReferenceString(refNode, m_root); } if (valueString == null) valueString = attributeInfo.Type.Convert(value); var bWriteAttribute = true; if (!m_bWritingUserSettings) bWriteAttribute = !s_lstExcludeAttributes.Contains(attributeInfo.Name); if (bWriteAttribute) writer.WriteAttributeString(attributeInfo.Name, valueString); } } } // write value if not the default if (valueAttribute != null) { var value = node.GetAttribute(valueAttribute); writer.WriteString(valueAttribute.Type.Convert(value)); } // write child elements foreach (var childInfo in type.Children) { if (childInfo.IsList) { foreach (var child in node.GetChildList(childInfo)) WriteElement(child, writer); } else { var child = node.GetChild(childInfo); if (child != null) WriteElement(child, writer); } } writer.WriteEndElement(); }