📄 xmlschemacompletiondata.cs
字号:
}
}
return matchedElement;
}
/// <summary>
/// Finds the named child element contained in the restriction element.
/// </summary>
XmlSchemaElement FindChildElement(XmlSchemaComplexContentRestriction restriction, QualifiedName name)
{
XmlSchemaElement matchedElement = null;
XmlSchemaSequence sequence = restriction.Particle as XmlSchemaSequence;
if (sequence != null) {
matchedElement = FindElement(sequence.Items, name);
}
return matchedElement;
}
/// <summary>
/// Finds the element in the collection of schema objects.
/// </summary>
XmlSchemaElement FindElement(XmlSchemaObjectCollection items, QualifiedName name)
{
XmlSchemaElement matchedElement = null;
foreach (XmlSchemaObject schemaObject in items) {
XmlSchemaElement element = schemaObject as XmlSchemaElement;
XmlSchemaSequence sequence = schemaObject as XmlSchemaSequence;
XmlSchemaChoice choice = schemaObject as XmlSchemaChoice;
XmlSchemaGroupRef groupRef = schemaObject as XmlSchemaGroupRef;
if (element != null) {
if (element.Name != null) {
if (name.Name == element.Name) {
matchedElement = element;
}
} else if (element.RefName != null) {
if (name.Name == element.RefName.Name) {
matchedElement = FindElement(element.RefName);
} else {
// Abstract element?
XmlSchemaElement abstractElement = FindElement(element.RefName);
if (abstractElement.IsAbstract) {
matchedElement = FindSubstitutionGroupElement(abstractElement.QualifiedName, name);
}
}
}
} else if (sequence != null) {
matchedElement = FindElement(sequence.Items, name);
} else if (choice != null) {
matchedElement = FindElement(choice.Items, name);
} else if (groupRef != null) {
matchedElement = FindElement(groupRef, name);
}
// Did we find a match?
if (matchedElement != null) {
break;
}
}
return matchedElement;
}
XmlSchemaElement FindElement(XmlSchemaGroupRef groupRef, QualifiedName name)
{
XmlSchemaElement matchedElement = null;
XmlSchemaGroup group = FindNamedGroup(groupRef.RefName.Name);
if (group != null) {
XmlSchemaSequence sequence = group.Particle as XmlSchemaSequence;
XmlSchemaChoice choice = group.Particle as XmlSchemaChoice;
if(sequence != null) {
matchedElement = FindElement(sequence.Items, name);
} else if (choice != null) {
matchedElement = FindElement(choice.Items, name);
}
}
return matchedElement;
}
static XmlSchemaAttributeGroup FindAttributeGroup(XmlSchema schema, string name)
{
XmlSchemaAttributeGroup matchedGroup = null;
if (name != null) {
foreach (XmlSchemaObject schemaObject in schema.Items) {
XmlSchemaAttributeGroup group = schemaObject as XmlSchemaAttributeGroup;
if (group != null) {
if (group.Name == name) {
matchedGroup = group;
break;
}
}
}
// Try included schemas.
if (matchedGroup == null) {
foreach (XmlSchemaExternal external in schema.Includes) {
XmlSchemaInclude include = external as XmlSchemaInclude;
if (include != null) {
if (include.Schema != null) {
matchedGroup = FindAttributeGroup(include.Schema, name);
}
}
}
}
}
return matchedGroup;
}
XmlSchemaGroup FindNamedGroup(string name)
{
XmlSchemaGroup matchedGroup = null;
if (name != null) {
foreach (XmlSchemaObject schemaObject in schema.Groups.Values) {
XmlSchemaGroup group = schemaObject as XmlSchemaGroup;
if (group != null) {
if (group.Name == name) {
matchedGroup = group;
break;
}
}
}
}
return matchedGroup;
}
XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaElement element, string name)
{
XmlCompletionDataCollection data = new XmlCompletionDataCollection();
XmlSchemaComplexType complexType = GetElementAsComplexType(element);
if (complexType != null) {
XmlSchemaAttribute attribute = FindAttribute(complexType, name);
if (attribute != null) {
data.AddRange(GetAttributeValueCompletionData(attribute));
}
}
return data;
}
XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaAttribute attribute)
{
XmlCompletionDataCollection data = new XmlCompletionDataCollection();
if (attribute.SchemaType != null) {
XmlSchemaSimpleTypeRestriction simpleTypeRestriction = attribute.SchemaType.Content as XmlSchemaSimpleTypeRestriction;
if (simpleTypeRestriction != null) {
data.AddRange(GetAttributeValueCompletionData(simpleTypeRestriction));
}
} else if (attribute.AttributeType != null) {
XmlSchemaSimpleType simpleType = attribute.AttributeType as XmlSchemaSimpleType;
XmlSchemaDatatype dataType = attribute.AttributeType as XmlSchemaDatatype;
if (simpleType != null) {
data.AddRange(GetAttributeValueCompletionData(simpleType));
} else if (dataType != null) {
if (dataType.ValueType == typeof(bool)) {
data.AddRange(GetBooleanAttributeValueCompletionData());
}
}
}
return data;
}
XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeRestriction simpleTypeRestriction)
{
XmlCompletionDataCollection data = new XmlCompletionDataCollection();
foreach (XmlSchemaObject schemaObject in simpleTypeRestriction.Facets) {
XmlSchemaEnumerationFacet enumFacet = schemaObject as XmlSchemaEnumerationFacet;
if (enumFacet != null) {
AddAttributeValue(data, enumFacet.Value, enumFacet.Annotation);
}
}
return data;
}
XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeUnion union)
{
XmlCompletionDataCollection data = new XmlCompletionDataCollection();
foreach (XmlSchemaObject schemaObject in union.BaseTypes) {
XmlSchemaSimpleType simpleType = schemaObject as XmlSchemaSimpleType;
if (simpleType != null) {
data.AddRange(GetAttributeValueCompletionData(simpleType));
}
}
return data;
}
XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleType simpleType)
{
XmlCompletionDataCollection data = new XmlCompletionDataCollection();
XmlSchemaSimpleTypeRestriction simpleTypeRestriction = simpleType.Content as XmlSchemaSimpleTypeRestriction;
XmlSchemaSimpleTypeUnion union = simpleType.Content as XmlSchemaSimpleTypeUnion;
XmlSchemaSimpleTypeList list = simpleType.Content as XmlSchemaSimpleTypeList;
if (simpleTypeRestriction != null) {
data.AddRange(GetAttributeValueCompletionData(simpleTypeRestriction));
} else if (union != null) {
data.AddRange(GetAttributeValueCompletionData(union));
} else if (list != null) {
data.AddRange(GetAttributeValueCompletionData(list));
}
return data;
}
XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeList list)
{
XmlCompletionDataCollection data = new XmlCompletionDataCollection();
if (list.ItemType != null) {
data.AddRange(GetAttributeValueCompletionData(list.ItemType));
} else if (list.ItemTypeName != null) {
XmlSchemaSimpleType simpleType = FindSimpleType(list.ItemTypeName);
if (simpleType != null) {
data.AddRange(GetAttributeValueCompletionData(simpleType));
}
}
return data;
}
/// <summary>
/// Gets the set of attribute values for an xs:boolean type.
/// </summary>
XmlCompletionDataCollection GetBooleanAttributeValueCompletionData()
{
XmlCompletionDataCollection data = new XmlCompletionDataCollection();
AddAttributeValue(data, "0");
AddAttributeValue(data, "1");
AddAttributeValue(data, "true");
AddAttributeValue(data, "false");
return data;
}
XmlSchemaAttribute FindAttribute(XmlSchemaComplexType complexType, string name)
{
XmlSchemaAttribute matchedAttribute = null;
matchedAttribute = FindAttribute(complexType.Attributes, name);
if (matchedAttribute == null) {
XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
if (complexContent != null) {
matchedAttribute = FindAttribute(complexContent, name);
}
}
return matchedAttribute;
}
XmlSchemaAttribute FindAttribute(XmlSchemaObjectCollection schemaObjects, string name)
{
XmlSchemaAttribute matchedAttribute = null;
foreach (XmlSchemaObject schemaObject in schemaObjects) {
XmlSchemaAttribute attribute = schemaObject as XmlSchemaAttribute;
XmlSchemaAttributeGroupRef groupRef = schemaObject as XmlSchemaAttributeGroupRef;
if (attribute != null) {
if (attribute.Name == name) {
matchedAttribute = attribute;
break;
}
} else if (groupRef != null) {
matchedAttribute = FindAttribute(groupRef, name);
if (matchedAttribute != null) {
break;
}
}
}
return matchedAttribute;
}
XmlSchemaAttribute FindAttribute(XmlSchemaAttributeGroupRef groupRef, string name)
{
XmlSchemaAttribute matchedAttribute = null;
if (groupRef.RefName != null) {
XmlSchemaAttributeGroup group = FindAttributeGroup(schema, groupRef.RefName.Name);
if (group != null) {
matchedAttribute = FindAttribute(group.Attributes, name);
}
}
return matchedAttribute;
}
XmlSchemaAttribute FindAttribute(XmlSchemaComplexContent complexContent, string name)
{
XmlSchemaAttribute matchedAttribute = null;
XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
if (extension != null) {
matchedAttribute = FindAttribute(extension, name);
} else if (restriction != null) {
matchedAttribute = FindAttribute(restriction, name);
}
return matchedAttribute;
}
XmlSchemaAttribute FindAttribute(XmlSchemaComplexContentExtension extension, string name)
{
XmlSchemaAttribute matchedAttribute = FindAttribute(extension.Attributes, name);
return matchedAttribute;
}
XmlSchemaAttribute FindAttribute(XmlSchemaComplexContentRestriction restriction, string name)
{
XmlSchemaAttribute matchedAttribute = FindAttribute(restriction.Attributes, name);
if (matchedAttribute == null) {
XmlSchemaComplexType complexType = FindNamedType(schema, restriction.BaseTypeName);
if (complexType != null) {
matchedAttribute = FindAttribute(complexType, name);
}
}
return matchedAttribute;
}
/// <summary>
/// Adds an attribute value to the completion data collection.
/// </summary>
void AddAttributeValue(XmlCompletionDataCollection data, string valueText)
{
XmlCompletionData completionData = new XmlCompletionData(valueText, XmlCompletionData.DataType.XmlAttributeValue);
data.Add(completionData);
}
/// <summary>
/// Adds an attribute value to the completion data collection.
/// </summary>
void AddAttributeValue(XmlCompletionDataCollection data, string valueText, XmlSchemaAnnotation annotation)
{
string documentation = GetDocumentation(annotation);
XmlCompletionData completionData = new XmlCompletionData(valueText, documentation, XmlCompletionData.DataType.XmlAttributeValue);
data.Add(completionData);
}
/// <summary>
/// Adds an attribute value to the completion data collection.
/// </summary>
void AddAttributeValue(XmlCompletionDataCollection data, string valueText, string description)
{
XmlCompletionData completionData = new XmlCompletionData(valueText, description, XmlCompletionData.DataType.XmlAttributeValue);
data.Add(completionData);
}
XmlSchemaSimpleType FindSimpleType(XmlQualifiedName name)
{
XmlSchemaSimpleType matchedSimpleType = null;
foreach (XmlSchemaObject schemaObject in schema.SchemaTypes.Values) {
XmlSchemaSimpleType simpleType = schemaObject as XmlSchemaSimpleType;
if (simpleType != null) {
if (simpleType.QualifiedName == name) {
matchedSimpleType = simpleType;
break;
}
}
}
return matchedSimpleType;
}
/// <summary>
/// Adds any elements that have the specified substitution group.
/// </summary>
void AddSubstitionGroupElements(XmlCompletionDataCollection data, XmlQualifiedName group, string prefix)
{
foreach (XmlSchemaElement element in schema.Elements.Values) {
if (element.SubstitutionGroup == group) {
AddElement(data, element.Name, prefix, element.Annotation);
}
}
}
/// <summary>
/// Looks for the substitution group element of the specified name.
/// </summary>
XmlSchemaElement FindSubstitutionGroupElement(XmlQualifiedName group, QualifiedName name)
{
XmlSchemaElement matchedElement = null;
foreach (XmlSchemaElement element in schema.Elements.Values) {
if (element.SubstitutionGroup == group) {
if (element.Name != null) {
if (element.Name == name.Name) {
matchedElement = element;
break;
}
}
}
}
return matchedElement;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -