{"record":{"id":"37af6fb574472491","repo":"iOfficeAI/OfficeCLI","slug":"setattr-format-name-value","errorCode":null,"errorMessage":"setattr format: name=value","messagePattern":"setattr format: name=value","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/officecli/Core/RawXmlHelper.cs","lineNumber":234,"sourceCode":"                    break;\n\n                case \"replace\":\n                    if (xml == null) throw new ArgumentException(\"--xml is required for replace\");\n                    var replaceFragment = ParseFragment(xml, xDoc);\n                    node.ReplaceWith(replaceFragment.ToArray());\n                    affected++;\n                    break;\n\n                case \"remove\" or \"delete\":\n                    RequireParent(node, \"remove\");\n                    node.Remove();\n                    affected++;\n                    break;\n\n                case \"setattr\":\n                    if (xml == null) throw new ArgumentException(\"--xml is required for setattr (format: name=value)\");\n                    var eqIdx = xml.IndexOf('=');\n                    if (eqIdx <= 0) throw new ArgumentException(\"setattr format: name=value\");\n                    var attrName = xml[..eqIdx];\n                    var attrValue = xml[(eqIdx + 1)..];\n\n                    // Handle namespaced attributes (e.g. w:val)\n                    var colonIdx = attrName.IndexOf(':');\n                    if (colonIdx > 0)\n                    {\n                        var prefix = attrName[..colonIdx];\n                        var localName = attrName[(colonIdx + 1)..];\n                        var ns = nsManager.LookupNamespace(prefix);\n                        if (ns != null)\n                            node.SetAttributeValue(XName.Get(localName, ns), attrValue);\n                        else\n                            node.SetAttributeValue(attrName, attrValue);\n                    }\n                    else\n                    {\n                        node.SetAttributeValue(attrName, attrValue);","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/iOfficeAI/OfficeCLI/blob/1ced45e900782c5083ed550ddf328ee974e425e7/src/officecli/Core/RawXmlHelper.cs#L216-L252","documentation":"Thrown during setattr when the xml value (the name=value string) either contains no '=' character at all (IndexOf returns -1) or has '=' as the very first character (IndexOf returns 0, meaning the attribute name is empty). The format requires a non-empty name before the '=' delimiter.","triggerScenarios":"RawXmlHelper.Execute(rootElement, xpath, \"setattr\", xml) where xml.IndexOf('=') <= 0. Cases: xml has no '=' (e.g. 'w:valcenter'), or xml starts with '=' (e.g. '=center'). The check is eqIdx <= 0, catching both -1 and 0.","commonSituations":"Caller provides just the attribute name without '=value'. Caller uses a different delimiter (':', ' ', ':=' instead of '='). Caller passes the value first ('=center' or 'center=w:val' where the intent was 'w:val=center'). The xml string is empty or whitespace.","solutions":["Format the value as 'attributename=value', with the name before '=' and the value after.","For namespaced attributes, use 'prefix:localname=value', e.g. 'w:val=center'.","Check for typos: missing '=', wrong delimiter, or reversed order (value=name instead of name=value)."],"exampleFix":"// before: missing '=' or wrong format\nRawXmlHelper.Execute(root, xpath, \"setattr\", \"w:valcenter\");\nRawXmlHelper.Execute(root, xpath, \"setattr\", \"center\");\nRawXmlHelper.Execute(root, xpath, \"setattr\", \"=center\");\n\n// after: name=value format\nRawXmlHelper.Execute(root, xpath, \"setattr\", \"w:val=center\");","handlingStrategy":"validation","validationCode":"// Validate name=value format before calling setattr\nif (action.Equals(\"setattr\", StringComparison.OrdinalIgnoreCase))\n{\n    var eqIdx = xml?.IndexOf('=') ?? -1;\n    if (eqIdx <= 0)\n        throw new ArgumentException($\"setattr requires 'name=value' format. Got: '{xml}'\");\n}\n\nRawXmlHelper.Execute(rootElement, xpath, action, xml);","typeGuard":null,"tryCatchPattern":"try\n{\n    RawXmlHelper.Execute(rootElement, xpath, \"setattr\", xml);\n}\ncatch (ArgumentException ex) when (ex.Message.Contains(\"setattr format\"))\n{\n    Console.Error.WriteLine($\"setattr requires 'name=value'. Got: '{xml}'\");\n}","preventionTips":["Format setattr value as 'attributename=value' with the name before '='.","Check for missing '=', wrong delimiters (:, space), or reversed order.","For namespaced attributes: 'prefix:localname=value'."],"tags":["xml","xpath","openxml","argument","raw-set","attribute"],"backgroundTag":null,"analyzedSha":"1ced45e900782c5083ed550ddf328ee974e425e7","analyzedAt":"2026-08-13T13:01:07.193Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}