diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/controller/StandardContentViewerController.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/controller/StandardContentViewerController.java index f249aeb4a9fb..6321d9332db5 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/controller/StandardContentViewerController.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/controller/StandardContentViewerController.java @@ -112,8 +112,6 @@ public void doGet(final HttpServletRequest request, final HttpServletResponse re final StandardTransformProvider transformProvider = new StandardTransformProvider(); transformProvider.setIndent(true); - transformProvider.setOmitXmlDeclaration(true); - transformProvider.transform(source, result); break; } @@ -198,4 +196,5 @@ private String getDisplayName(final String contentType) { case null, default -> null; }; } + } diff --git a/nifi-frontend/src/main/frontend/apps/standard-content-viewer/src/app/pages/standard-content-viewer/feature/standard-content-viewer.component.ts b/nifi-frontend/src/main/frontend/apps/standard-content-viewer/src/app/pages/standard-content-viewer/feature/standard-content-viewer.component.ts index 1afb15c48185..a9380d7a4b92 100644 --- a/nifi-frontend/src/main/frontend/apps/standard-content-viewer/src/app/pages/standard-content-viewer/feature/standard-content-viewer.component.ts +++ b/nifi-frontend/src/main/frontend/apps/standard-content-viewer/src/app/pages/standard-content-viewer/feature/standard-content-viewer.component.ts @@ -198,7 +198,20 @@ export class StandardContentViewer { this.error = null; this.contentLoaded = true; - this.contentFormGroup.get('value')?.setValue(content); + // For XML, clean up formatting for display + let processedContent = content; + if (this.mimeTypeDisplayName === 'xml') { + // Add newline after XML declaration if missing ( -> \n) + processedContent = processedContent.replace(/\?>\n<'); + + // Remove blank lines that appear between tags (whitespace-only text nodes) + // but preserve blank lines that are part of actual text content + // Uses \r?\n to handle both Unix (LF) and Windows (CRLF) line endings + // The capture group ($2) preserves indentation before the next tag + processedContent = processedContent.replace(/>\s*\r?\n(\s*\r?\n)+(\s*)\n$2<'); + } + + this.contentFormGroup.get('value')?.setValue(processedContent); } }); }