Skip to content

Commit 4a49754

Browse files
author
Michael Ganss
committed
Merge branch 'master' of github.com:mganss/XmlSchemaClassGenerator
2 parents 8450da9 + c9268e6 commit 4a49754

File tree

3 files changed

+99
-35
lines changed

3 files changed

+99
-35
lines changed
+63-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace XmlSchemaClassGenerator
22
{
33
using System.Xml;
4+
using System.Xml.Schema;
45

56
public interface INamingProvider
67
{
@@ -9,39 +10,90 @@ public interface INamingProvider
910
/// </summary>
1011
/// <param name="typeModelName">Name of the typeModel</param>
1112
/// <param name="attributeName">Attribute name</param>
13+
/// <param name="attribute">Original XSD attribute</param>
1214
/// <returns>Name of the property</returns>
13-
string PropertyNameFromAttribute(string typeModelName, string attributeName);
15+
string PropertyNameFromAttribute(string typeModelName, string attributeName, XmlSchemaAttribute attribute);
1416

1517
/// <summary>
1618
/// Creates a name for a property from an element name
1719
/// </summary>
1820
/// <param name="typeModelName">Name of the typeModel</param>
1921
/// <param name="elementName">Element name</param>
22+
/// <param name="element">Original XSD element</param>
2023
/// <returns>Name of the property</returns>
21-
string PropertyNameFromElement(string typeModelName, string elementName);
24+
string PropertyNameFromElement(string typeModelName, string elementName, XmlSchemaElement element);
2225

2326
/// <summary>
2427
/// Creates a name for an enum member based on a value
2528
/// </summary>
2629
/// <param name="enumName">Name of the enum</param>
2730
/// <param name="value">Value name</param>
31+
/// <param name="xmlFacet">Original XSD enumeration facet</param>
2832
/// <returns>Name of the enum member</returns>
29-
string EnumMemberNameFromValue(string enumName, string value);
33+
string EnumMemberNameFromValue(string enumName, string value, XmlSchemaEnumerationFacet xmlFacet);
3034

31-
string ComplexTypeNameFromQualifiedName(XmlQualifiedName qualifiedName);
35+
/// <summary>
36+
/// Define the name to be used when a ComplexType is found in the XSD.
37+
/// </summary>
38+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
39+
/// <param name="complexType">Original XSD ComplexType</param>
40+
/// <returns>A string with a valid C# identifier name.</returns>
41+
string ComplexTypeNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaComplexType complexType);
3242

33-
string AttributeGroupTypeNameFromQualifiedName(XmlQualifiedName qualifiedName);
43+
/// <summary>
44+
/// Define the name to be used when a AttributeGroup is found in the XSD.
45+
/// </summary>
46+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
47+
/// <param name="attributeGroup">Original XSD AttributeGroup</param>
48+
/// <returns>A string with a valid C# identifier name.</returns>
49+
string AttributeGroupTypeNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaAttributeGroup attributeGroup);
3450

35-
string GroupTypeNameFromQualifiedName(XmlQualifiedName qualifiedName);
51+
/// <summary>
52+
/// Define the name to be used when a GroupType is found in the XSD.
53+
/// </summary>
54+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
55+
/// <param name="group">Original XSD group</param>
56+
/// <returns>A string with a valid C# identifier name.</returns>
57+
string GroupTypeNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaGroup group);
3658

37-
string SimpleTypeNameFromQualifiedName(XmlQualifiedName qualifiedName);
59+
/// <summary>
60+
/// Define the name to be used when a SimpleType is found in the XSD.
61+
/// </summary>
62+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
63+
/// <param name="simpleType">Original XSD SimpleType</param>
64+
/// <returns>A string with a valid C# identifier name.</returns>
65+
string SimpleTypeNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaSimpleType simpleType);
3866

39-
string RootClassNameFromQualifiedName(XmlQualifiedName qualifiedName);
67+
/// <summary>
68+
/// Define the name to be used for the root class.
69+
/// </summary>
70+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
71+
/// <param name="xmlElement">Original XSD element</param>
72+
/// <returns>A string with a valid C# identifier name.</returns>
73+
string RootClassNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaElement xmlElement);
4074

41-
string EnumTypeNameFromQualifiedName(XmlQualifiedName qualifiedName);
75+
/// <summary>
76+
/// Define the name to be used when an enum type is found in the XSD.
77+
/// </summary>
78+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
79+
/// <param name="xmlSimpleType">Original XSD SimpleType</param>
80+
/// <returns>A string with a valid C# identifier name.</returns>
81+
string EnumTypeNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaSimpleType xmlSimpleType);
4282

43-
string AttributeNameFromQualifiedName(XmlQualifiedName qualifiedName);
83+
/// <summary>
84+
/// Define the name to be used when an attribute is found in the XSD.
85+
/// </summary>
86+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
87+
/// <param name="xmlAttribute">Original XSD attribute</param>
88+
/// <returns>A string with a valid C# identifier name.</returns>
89+
string AttributeNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaAttribute xmlAttribute);
4490

45-
string ElementNameFromQualifiedName(XmlQualifiedName qualifiedName);
91+
/// <summary>
92+
/// Define the name of the C# class property from the element name in XSD.
93+
/// </summary>
94+
/// <param name="qualifiedName">The name as defined in the XSD if present.</param>
95+
/// <param name="xmlElement">Original XSD element</param>
96+
/// <returns>A string with a valid C# identifier name.</returns>
97+
string ElementNameFromQualifiedName(XmlQualifiedName qualifiedName, XmlSchemaElement xmlElement);
4698
}
4799
}

XmlSchemaClassGenerator/ModelBuilder.cs

+12-12
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ private void CreateElements(IEnumerable<XmlSchemaElement> elements)
263263

264264
derivedClassModel = new ClassModel(_configuration)
265265
{
266-
Name = _configuration.NamingProvider.RootClassNameFromQualifiedName(rootElement.QualifiedName),
266+
Name = _configuration.NamingProvider.RootClassNameFromQualifiedName(rootElement.QualifiedName, rootElement),
267267
Namespace = CreateNamespaceModel(elementSource, rootElement.QualifiedName)
268268
};
269269

@@ -289,7 +289,7 @@ private void CreateElements(IEnumerable<XmlSchemaElement> elements)
289289

290290
var originalClassModel = new ClassModel(_configuration)
291291
{
292-
Name = _configuration.NamingProvider.RootClassNameFromQualifiedName(type.RootElementName),
292+
Name = _configuration.NamingProvider.RootClassNameFromQualifiedName(type.RootElementName, rootElement),
293293
Namespace = classModel.Namespace
294294
};
295295

@@ -403,7 +403,7 @@ private TypeModel CreateTypeModel(XmlSchemaAnnotated type, XmlQualifiedName qual
403403

404404
private TypeModel CreateTypeModel(Uri source, XmlSchemaGroup group, NamespaceModel namespaceModel, XmlQualifiedName qualifiedName, List<DocumentationModel> docs)
405405
{
406-
var name = "I" + _configuration.NamingProvider.GroupTypeNameFromQualifiedName(qualifiedName);
406+
var name = "I" + _configuration.NamingProvider.GroupTypeNameFromQualifiedName(qualifiedName, group);
407407
if (namespaceModel != null) { name = namespaceModel.GetUniqueTypeName(name); }
408408

409409
var interfaceModel = new InterfaceModel(_configuration)
@@ -437,7 +437,7 @@ private TypeModel CreateTypeModel(Uri source, XmlSchemaGroup group, NamespaceMod
437437

438438
private TypeModel CreateTypeModel(Uri source, XmlSchemaAttributeGroup attributeGroup, NamespaceModel namespaceModel, XmlQualifiedName qualifiedName, List<DocumentationModel> docs)
439439
{
440-
var name = "I" + _configuration.NamingProvider.AttributeGroupTypeNameFromQualifiedName(qualifiedName);
440+
var name = "I" + _configuration.NamingProvider.AttributeGroupTypeNameFromQualifiedName(qualifiedName, attributeGroup);
441441
if (namespaceModel != null) { name = namespaceModel.GetUniqueTypeName(name); }
442442

443443
var interfaceModel = new InterfaceModel(_configuration)
@@ -469,7 +469,7 @@ private TypeModel CreateTypeModel(Uri source, XmlSchemaAttributeGroup attributeG
469469

470470
private TypeModel CreateTypeModel(Uri source, XmlSchemaComplexType complexType, NamespaceModel namespaceModel, XmlQualifiedName qualifiedName, List<DocumentationModel> docs)
471471
{
472-
var name = _configuration.NamingProvider.ComplexTypeNameFromQualifiedName(qualifiedName);
472+
var name = _configuration.NamingProvider.ComplexTypeNameFromQualifiedName(qualifiedName, complexType);
473473
if (namespaceModel != null)
474474
{
475475
name = namespaceModel.GetUniqueTypeName(name);
@@ -648,7 +648,7 @@ private TypeModel CreateTypeModel(XmlSchemaSimpleType simpleType, NamespaceModel
648648
if (isEnum)
649649
{
650650
// we got an enum
651-
var name = _configuration.NamingProvider.EnumTypeNameFromQualifiedName(qualifiedName);
651+
var name = _configuration.NamingProvider.EnumTypeNameFromQualifiedName(qualifiedName, simpleType);
652652
if (namespaceModel != null) { name = namespaceModel.GetUniqueTypeName(name); }
653653

654654
var enumModel = new EnumModel(_configuration)
@@ -666,7 +666,7 @@ private TypeModel CreateTypeModel(XmlSchemaSimpleType simpleType, NamespaceModel
666666
{
667667
var value = new EnumValueModel
668668
{
669-
Name = _configuration.NamingProvider.EnumMemberNameFromValue(enumModel.Name, facet.Value),
669+
Name = _configuration.NamingProvider.EnumMemberNameFromValue(enumModel.Name, facet.Value, facet),
670670
Value = facet.Value
671671
};
672672

@@ -698,7 +698,7 @@ private TypeModel CreateTypeModel(XmlSchemaSimpleType simpleType, NamespaceModel
698698
restrictions = GetRestrictions(facets, simpleType).Where(r => r != null).Sanitize().ToList();
699699
}
700700

701-
var simpleModelName = _configuration.NamingProvider.SimpleTypeNameFromQualifiedName(qualifiedName);
701+
var simpleModelName = _configuration.NamingProvider.SimpleTypeNameFromQualifiedName(qualifiedName, simpleType);
702702
if (namespaceModel != null) { simpleModelName = namespaceModel.GetUniqueTypeName(simpleModelName); }
703703

704704
var simpleModel = new SimpleModel(_configuration)
@@ -755,7 +755,7 @@ private IEnumerable<PropertyModel> CreatePropertiesForAttributes(Uri source, Typ
755755
if (attribute.Use != XmlSchemaUse.Prohibited)
756756
{
757757
var attributeQualifiedName = attribute.AttributeSchemaType.QualifiedName;
758-
var attributeName = _configuration.NamingProvider.AttributeNameFromQualifiedName(attribute.QualifiedName);
758+
var attributeName = _configuration.NamingProvider.AttributeNameFromQualifiedName(attribute.QualifiedName, attribute);
759759

760760
if (attribute.Parent is XmlSchemaAttributeGroup attributeGroup
761761
&& attributeGroup.QualifiedName != typeModel.XmlSchemaName
@@ -775,7 +775,7 @@ private IEnumerable<PropertyModel> CreatePropertiesForAttributes(Uri source, Typ
775775
if (attributeQualifiedName.IsEmpty || string.IsNullOrEmpty(attributeQualifiedName.Namespace))
776776
{
777777
// inner type, have to generate a type name
778-
var typeName = _configuration.NamingProvider.PropertyNameFromAttribute(typeModel.Name, attribute.QualifiedName.Name);
778+
var typeName = _configuration.NamingProvider.PropertyNameFromAttribute(typeModel.Name, attribute.QualifiedName.Name, attribute);
779779
attributeQualifiedName = new XmlQualifiedName(typeName, typeModel.XmlSchemaName.Namespace);
780780
// try to avoid name clashes
781781
if (NameExists(attributeQualifiedName))
@@ -863,7 +863,7 @@ private IEnumerable<PropertyModel> CreatePropertiesForElements(Uri source, TypeM
863863
{
864864
// inner type, have to generate a type name
865865
var typeModelName = xmlParticle is XmlSchemaGroupRef groupRef ? groupRef.RefName : typeModel.XmlSchemaName;
866-
var typeName = _configuration.NamingProvider.PropertyNameFromElement(typeModelName.Name, element.QualifiedName.Name);
866+
var typeName = _configuration.NamingProvider.PropertyNameFromElement(typeModelName.Name, element.QualifiedName.Name, element);
867867
elementQualifiedName = new XmlQualifiedName(typeName, typeModel.XmlSchemaName.Namespace);
868868
// try to avoid name clashes
869869
if (NameExists(elementQualifiedName))
@@ -876,7 +876,7 @@ private IEnumerable<PropertyModel> CreatePropertiesForElements(Uri source, TypeM
876876
}
877877

878878
var effectiveElement = substitute?.Element ?? element;
879-
var propertyName = _configuration.NamingProvider.ElementNameFromQualifiedName(effectiveElement.QualifiedName);
879+
var propertyName = _configuration.NamingProvider.ElementNameFromQualifiedName(effectiveElement.QualifiedName, effectiveElement);
880880
var originalPropertyName = propertyName;
881881
if (propertyName == typeModel.Name)
882882
{

0 commit comments

Comments
 (0)