{"record":{"id":"d28b07755a687ae0","repo":"apple/pkl","slug":"invalidxmlname","errorCode":"invalidXmlName","errorMessage":"invalidXmlName","messagePattern":"invalidXmlName","errorType":"error_code","errorClass":"VmException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java","lineNumber":466,"sourceCode":"            .forceAndIterateMemberValues(\n                (key, member, value) -> {\n                  if (member.isElement()) doVisitElement(value);\n                  return true;\n                });\n      } else {\n        visit(content);\n      }\n\n      decreaseIndent();\n      if (prevLineNumber < lineNumber) startNewLine();\n\n      builder.append(\"</\").append(name).append(\">\");\n    }\n\n    private void validateName(String name, String kind) {\n      if (validator.isValidName(name)) return;\n\n      throw new VmExceptionBuilder().evalError(\"invalidXmlName\", version, kind, name).build();\n    }\n\n    private void startNewLine() {\n      if (builder.isEmpty()) return;\n\n      lineNumber += 1;\n      builder.append(LINE_BREAK).append(currIndent);\n    }\n  }\n\n  private static boolean isBlockFormat(VmObjectLike object) {\n    return (Boolean) VmUtils.readMember(object, Identifier.IS_BLOCK_FORMAT);\n  }\n}\n","sourceCodeStart":448,"sourceCodeEnd":481,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java#L448-L481","documentation":"XML element or attribute names must be valid XML names (per the XML Name production validated by the renderer's validator). validateName throws an evaluation error with code invalidXmlName when a rendered element or attribute name fails validation.","triggerScenarios":"Rendering an XmlElement (or one of its properties/entries) whose tag name or attribute name contains spaces, starts with a digit, or contains characters not allowed in XML names; validateName is called for both element names and attribute names from writeXmlElement.","commonSituations":"Generating tags from user data or identifiers that contain hyphens in the wrong place, spaces, or leading digits; using a property name as a tag without sanitizing it; locale-formatted or templated names.","solutions":["Rename the element/attribute to a valid XML name (letters, digits, hyphens, underscores, periods; must not start with a digit or punctuation).","Sanitize programmatic names before rendering (strip/replace invalid characters, prefix if starting with a digit).","Use a fixed literal tag name and put the dynamic value in an attribute or text content instead."],"exampleFix":"// before\nnew XmlElement { name = \"123 item\"; ... }\n// after\nnew XmlElement { name = \"item_123\"; ... }","handlingStrategy":"validation","validationCode":"boolean isValidXmlName(String name) {\n  return name != null && name.matches(\"[:_A-Za-z][:\\-._A-Za-z0-9]*\");\n}\n","typeGuard":null,"tryCatchPattern":"try { renderer.render(doc); } catch (EvalException e) { if (e.getMessage().contains(\"invalidXmlName\")) { /* sanitize and retry */ } }\n","preventionTips":["Sanitize dynamic tag/attribute names (regex-replace invalid chars, prefix leading digits).","Keep dynamic data in attribute values or text, not tag names.","Unit-test renderers with generated identifiers."],"tags":["pkl","xml","naming","validation"],"backgroundTag":"invalid-xml-name","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}