diff --git a/cmd/prune-junit-xml/prunexml.go b/cmd/prune-junit-xml/prunexml.go
index 66f8ced5e8c..9e80c406456 100644
--- a/cmd/prune-junit-xml/prunexml.go
+++ b/cmd/prune-junit-xml/prunexml.go
@@ -22,12 +22,15 @@ import (
 	"fmt"
 	"io"
 	"os"
+	"regexp"
 
 	"k8s.io/kubernetes/third_party/forked/gotestsum/junitxml"
 )
 
 func main() {
 	maxTextSize := flag.Int("max-text-size", 1, "maximum size of attribute or text (in MB)")
+	pruneTests := flag.Bool("prune-tests", true,
+		"prune's xml files to display only top level tests and failed sub-tests")
 	flag.Parse()
 	for _, path := range flag.Args() {
 		fmt.Printf("processing junit xml file : %s\n", path)
@@ -42,6 +45,9 @@ func main() {
 		}
 
 		pruneXML(suites, *maxTextSize*1e6) // convert MB into bytes (roughly!)
+		if *pruneTests {
+			pruneTESTS(suites)
+		}
 
 		xmlWriter, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
 		if err != nil {
@@ -79,6 +85,40 @@ func pruneXML(suites *junitxml.JUnitTestSuites, maxBytes int) {
 	}
 }
 
+// This function condenses the junit xml to have package name as top level identifier
+// and nesting under that.
+func pruneTESTS(suites *junitxml.JUnitTestSuites) {
+	var updatedTestsuites []junitxml.JUnitTestSuite
+
+	for _, suite := range suites.Suites {
+		var updatedTestcases []junitxml.JUnitTestCase
+		var updatedTestcase junitxml.JUnitTestCase
+		var updatedTestcaseFailure junitxml.JUnitFailure
+		failflag := false
+		name := suite.Name
+		regex := regexp.MustCompile(`^(.*?)/([^/]+)/?$`)
+		match := regex.FindStringSubmatch(name)
+		updatedTestcase.Classname = match[1]
+		updatedTestcase.Name = match[2]
+		updatedTestcase.Time = suite.Time
+		for _, testcase := range suite.TestCases {
+			// The top level testcase element in a JUnit xml file does not have the / character.
+			if testcase.Failure != nil {
+				failflag = true
+				updatedTestcaseFailure.Message = updatedTestcaseFailure.Message + testcase.Failure.Message + ";"
+				updatedTestcaseFailure.Contents = updatedTestcaseFailure.Contents + testcase.Failure.Contents + ";"
+				updatedTestcaseFailure.Type = updatedTestcaseFailure.Type + testcase.Failure.Type
+			}
+		}
+		if failflag {
+			updatedTestcase.Failure = &updatedTestcaseFailure
+		}
+		suite.TestCases = append(updatedTestcases, updatedTestcase)
+		updatedTestsuites = append(updatedTestsuites, suite)
+	}
+	suites.Suites = updatedTestsuites
+}
+
 func fetchXML(xmlReader io.Reader) (*junitxml.JUnitTestSuites, error) {
 	decoder := xml.NewDecoder(xmlReader)
 	var suites junitxml.JUnitTestSuites
diff --git a/cmd/prune-junit-xml/prunexml_test.go b/cmd/prune-junit-xml/prunexml_test.go
index 343e2261c81..f0b325f2d85 100644
--- a/cmd/prune-junit-xml/prunexml_test.go
+++ b/cmd/prune-junit-xml/prunexml_test.go
@@ -65,3 +65,54 @@ func TestPruneXML(t *testing.T) {
 	_ = writer.Flush()
 	assert.Equal(t, outputXML, string(output.Bytes()), "xml was not pruned correctly")
 }
+
+func TestPruneTESTS(t *testing.T) {
+	sourceXML := `
+
+	
+		
+			
+		
+		
+		
+		
+		
+		
+		
+	
+	
+		
+			
+		
+		
+		
+			FailureContent
+		
+	
+`
+
+	outputXML := `
+
+	
+		
+			
+		
+		
+	
+	
+		
+			
+		
+		
+			FailureContent;
+		
+	
+`
+	suites, _ := fetchXML(strings.NewReader(sourceXML))
+	pruneTESTS(suites)
+	var output bytes.Buffer
+	writer := bufio.NewWriter(&output)
+	_ = streamXML(writer, suites)
+	_ = writer.Flush()
+	assert.Equal(t, outputXML, string(output.Bytes()), "tests in xml was not pruned correctly")
+}