diff --git a/XSDVisualiser.Desktop/Views/LeftTreeView.axaml.cs b/XSDVisualiser.Desktop/Views/LeftTreeView.axaml.cs index 4485cf5..b24ee8b 100644 --- a/XSDVisualiser.Desktop/Views/LeftTreeView.axaml.cs +++ b/XSDVisualiser.Desktop/Views/LeftTreeView.axaml.cs @@ -370,9 +370,15 @@ public partial class LeftTreeView : UserControl await writer.FlushAsync(); } + private static string SanitizeXmlLocalName(string? name, string fallback) + { + var candidate = string.IsNullOrWhiteSpace(name) ? fallback : name!; + return XmlConvert.EncodeLocalName(candidate); + } + private static void WriteElementRecursive(XmlWriter writer, SchemaNode node) { - var localName = string.IsNullOrWhiteSpace(node.Name) ? "Element" : node.Name!; + var localName = SanitizeXmlLocalName(node.Name, "Element"); if (!string.IsNullOrEmpty(node.Namespace)) writer.WriteStartElement(localName, node.Namespace); else @@ -381,7 +387,7 @@ public partial class LeftTreeView : UserControl // Write attributes if any (use type + constraints as placeholder value) foreach (var attr in node.Attributes) { - var attrName = string.IsNullOrWhiteSpace(attr.Name) ? "attr" : attr.Name!; + var attrName = SanitizeXmlLocalName(attr.Name, "attr"); var value = BuildTypeAndConstraintText(attr.BuiltInType ?? attr.TypeName, attr.Constraints); if (!string.IsNullOrEmpty(attr.Namespace)) writer.WriteAttributeString(attrName, attr.Namespace, value);