Click here to Skip to main content
15,890,579 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more: , +
I have an XML in the following format:

XML
<?xml-stylesheet href="...css" type="text/css"?>
<repub>
    <head>
        <title>Main Title</title>
    </head>
    <body>
    <sec name="sec_1">
        <title>Section Title</title>
        <break name="article_6-3">
            <h1>
                <page num="6" />
                <bl>Article Title</bl>
            </h1>
            <fig><img src="images/img_6-3.jpg" alt=""/></fig>
            <p>
                <bl>
                <il>Paragraph italic value</il> and bold value.</bl>
            </p>
            <pw>Paragraph value</pw>
        <fig><img src="images/img_6-4.jpg" alt=""/></fig>
</break>
</sec>
</body>
</repub>


I want the XML child nodes to be in the same line as the parent, like:

XML
<?xml-stylesheet href="...css" type="text/css"?>
<repub>
    <head>
        <title>Main Title</title>
    </head>
    <body>
    <sec name="sec_1">
        <title>Section Title</title>
        <break name="article_6-3">
            <h1><page num="6" /><bl>Article Title</bl></h1> //Change 1
            <fig><img src="images/img_6-3.jpg" alt=""/></fig>
            <p><bl><il>Paragraph italic value</il> and bold value.</bl></p> //Change 2
            <pw>Paragraph value</pw>
        <fig><img src="images/img_6-4.jpg" alt=""/></fig>
</break>
</sec>
</body>
</repub>


Upon creating the XML, every time the indent also comes up and I can try to somehow manage to remove the indentation, but I am totally clueless as to how can I keep the child nodes in the same line as the parent.

I don't know what to do. Please help.

Regards Aman

What I have tried:

C#
XDocument xdoc = new XDocument();
                string filecontent = PreProcessXMLnondpvrepub(xmlfile);
                byte[] myByteArray = System.Text.Encoding.UTF8.GetBytes(filecontent);
                MemoryStream ms = new MemoryStream(myByteArray);
                StreamReader sr = new StreamReader(ms);
                xdoc = XDocument.Load(sr, LoadOptions.PreserveWhitespace);
                sr.Dispose();
                ms.Dispose();
                myByteArray = null;

private string PreProcessXML(String xmlpath)
        {
            StringBuilder sb = new StringBuilder();

            string openbreak = "";
            string closebreak = "";
            string secreplace = "";
            string boldreplace = "";
            int seccount = 1;

            foreach (var line in File.ReadLines(xmlpath))
            {
                if (line.ToString() != null)
                {
                    boldreplace = line.Replace("@@", "");
                    if (line.Contains("sf@") || line.StartsWith("<psf>") || line.StartsWith("<sf>"))
                    {
                        if (line.Contains("sf@"))
                        {
                            boldreplace = line.Replace("sf@", "<span class=\"standfirst\">");
                            boldreplace = boldreplace.Replace("</p>", "</span></p>");
                        }
                        else if (line.StartsWith("<psf>"))
                        {
                            boldreplace = line.Replace("<psf>", "<psf><span class=\"standfirst\">");
                            boldreplace = boldreplace.Replace("</psf>", "</span></psf>");
                        }
                        else if (line.StartsWith("<sf>"))
                        {
                            boldreplace = line.Replace("<sf>", "<sf><span class=\"standfirst\">");
                            boldreplace = boldreplace.Replace("</sf>", "</span></sf>");
                        }
                        boldreplace = boldreplace.Replace("</sf>", "</span>");
                        boldreplace = boldreplace.Replace("</psf>", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_bold\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                        boldreplace = boldreplace.Replace("</sup>", "</span>");
                        boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                        boldreplace = boldreplace.Replace("</sub>", "</span>");
                        boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                        boldreplace = boldreplace.Replace("</st>", "</span>");
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.Contains("<add>"))
                    {
                        boldreplace = boldreplace.Replace("<add>", "<add>\r\n");
                        boldreplace = boldreplace.Replace("</add>", "\r\n</add>");
                        boldreplace = boldreplace.Replace("", "");
                        boldreplace = boldreplace.Replace("", "");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                        boldreplace = boldreplace.Replace("</sup>", "</span>");
                        boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                        boldreplace = boldreplace.Replace("</sub>", "</span>");
                        boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                        boldreplace = boldreplace.Replace("</st>", "</span>");
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.Contains("</add>"))
                    {
                        boldreplace = boldreplace.Replace("<add>", "<add>\r\n");
                        boldreplace = boldreplace.Replace("</add>", "\r\n</add>");
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.Contains("<p><br/><p>"))
                    {
                        continue;
                    }
                    if (line.Contains("lt@") || line.StartsWith("<plt>"))
                    {
                        if ((line.Contains("") || line.Contains("") || line.Contains("") || line.Contains("<st>") || line.Contains("<sup>") || line.Contains("<sub>")))
                        {
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                            boldreplace = boldreplace.Replace("</sup>", "</span>");
                            boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                            boldreplace = boldreplace.Replace("</sub>", "</span>");
                            boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                            boldreplace = boldreplace.Replace("</st>", "</span>");
                            sb.AppendLine(boldreplace);
                            continue;
                        }
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.Contains("<bl>") || line.StartsWith("<bl>"))
                    {
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_bold\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                        boldreplace = boldreplace.Replace("</sup>", "</span>");
                        boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                        boldreplace = boldreplace.Replace("</sub>", "</span>");
                        boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                        boldreplace = boldreplace.Replace("</st>", "</span>");
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.StartsWith("<h1>"))
                    {
                        boldreplace = boldreplace.Replace("", "");
                        boldreplace = boldreplace.Replace("", "");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                        boldreplace = boldreplace.Replace("</sup>", "</span>");
                        boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                        boldreplace = boldreplace.Replace("</sub>", "</span>");
                        boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                        boldreplace = boldreplace.Replace("</st>", "</span>");
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.StartsWith("<h2") || line.Contains("<h2>"))
                    {
                        boldreplace = boldreplace.Replace("", " ");
                        boldreplace = boldreplace.Replace("", "");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                        boldreplace = boldreplace.Replace("</sup>", "</span>");
                        boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                        boldreplace = boldreplace.Replace("</sub>", "</span>");
                        boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                        boldreplace = boldreplace.Replace("</st>", "</span>");
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.StartsWith("<h3"))
                    {
                        boldreplace = boldreplace.Replace("", "");
                        boldreplace = boldreplace.Replace("", "");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                        boldreplace = boldreplace.Replace("</sup>", "</span>");
                        boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                        boldreplace = boldreplace.Replace("</sub>", "</span>");
                        boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                        boldreplace = boldreplace.Replace("</st>", "</span>");
                        sb.AppendLine(boldreplace);
                        continue;
                    }
                    if (line.StartsWith("<p") || line.StartsWith("<h4") || line.StartsWith("<h5") || line.StartsWith("<h6") || line.StartsWith("bl")
                        && (line.Contains("") || line.Contains("") || line.Contains("") || line.Contains("<st>") || line.Contains("<sup>") || line.Contains("<sub>")))
                    {
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_bold\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                        boldreplace = boldreplace.Replace("", "</span>");
                        boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                        boldreplace = boldreplace.Replace("</sup>", "</span>");
                        boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                        boldreplace = boldreplace.Replace("</sub>", "</span>");
                        boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                        boldreplace = boldreplace.Replace("</st>", "</span>");
                        if (line.Contains("<br/>"))
                        {
                            if (line.Contains("<br/></p>"))
                            {
                                boldreplace = boldreplace.Replace("<br/>", "");
                                continue;
                            }
                            else
                            {
                                boldreplace = boldreplace.Replace("<br/>", "</p>" + Environment.NewLine + "<p>");
                                sb.AppendLine(boldreplace);
                                continue;
                            }
                        }
                        sb.AppendLine(boldreplace);
                        continue;
                    }

                    if (line.Contains("<fig>"))
                    {
                        if (line.Contains("fc"))
                        {
                            boldreplace = boldreplace.Replace("<br/>", " ");
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                            boldreplace = boldreplace.Replace("</sup>", "</span>");
                            boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                            boldreplace = boldreplace.Replace("</sub>", "</span>");
                            boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                            boldreplace = boldreplace.Replace("</st>", "</span>");
                            sb.AppendLine(boldreplace);
                            continue;
                        }
                        else
                        {
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                            boldreplace = boldreplace.Replace("</sup>", "</span>");
                            boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                            boldreplace = boldreplace.Replace("</sub>", "</span>");
                            boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                            boldreplace = boldreplace.Replace("</st>", "</span>");
                            sb.AppendLine(boldreplace);
                            continue;
                        }
                    }

                    if (line.Contains("<bq>"))
                    {
                        if (line.Contains("<br/>"))
                        {
                            boldreplace = boldreplace.Replace("<br/>", " ");
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                            boldreplace = boldreplace.Replace("</sup>", "</span>");
                            boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                            boldreplace = boldreplace.Replace("</sub>", "</span>");
                            boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                            boldreplace = boldreplace.Replace("</st>", "</span>");
                            sb.AppendLine(boldreplace);
                            continue;
                        }
                        else
                        {
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_italic\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("", "<span class=\"ld_underline\">");
                            boldreplace = boldreplace.Replace("", "</span>");
                            boldreplace = boldreplace.Replace("<sup>", "<span class=\"ld_superscript\">");
                            boldreplace = boldreplace.Replace("</sup>", "</span>");
                            boldreplace = boldreplace.Replace("<sub>", "<span class=\"ld_subscript\">");
                            boldreplace = boldreplace.Replace("</sub>", "</span>");
                            boldreplace = boldreplace.Replace("<st>", "<span class=\"ld_strikethrough\">");
                            boldreplace = boldreplace.Replace("</st>", "</span>");
                            sb.AppendLine(boldreplace);
                            continue;
                        }
                    }

                    if (line.StartsWith("<sec>"))
                    {
                        secreplace = line.Replace("<sec>", "<sec name=\"sec_" + seccount + "\">");
                        seccount++;
                        sb.AppendLine(secreplace);
                        continue;
                    }

                    if (line.StartsWith("<break "))
                    {
                        openbreak = line.Replace("/", "");

                        if (closebreak != "")
                        {
                            sb.AppendLine(closebreak);
                        }
                        else
                            closebreak = "</break>";

                        sb.AppendLine(openbreak);
                    }
                    else
                    {
                        if (line == "</sec>")
                        {
                            sb.AppendLine(closebreak);
                            closebreak = "";
                        }
                        sb.AppendLine(line);
                    }
                }
            }
            return sb.ToString();
        }
Posted
Updated 19-Mar-19 2:07am
v2
Comments
Maciej Los 19-Mar-19 5:03am    
Is there any reason you want to change normal XML nodes behaviour?
BTW: Show the method you use to save xml file...
Primo Chalice 19-Mar-19 5:11am    
Yes, actually I am working on a project and there are some required changes to be made before the final output. Multiple output types have multiple variants.

For example, <bl> becomes < span class="ld_bold"> and < pw> becomes < p>.

So, if it is in one line, I can use StringBuilder and replace the values.
Maciej Los 19-Mar-19 6:20am    
Show the method you use to save xml file...
You need to add more details aout final xml conversion.
Primo Chalice 19-Mar-19 6:25am    
Since the code is long, I am providing a link with the content.

https://1drv.ms/u/s!ApO52Imsl0YIia4w2dssTKdBl7Rnig
Maciej Los 19-Mar-19 7:03am    
Sorry, but no one won't download a source code from unknown source. And no one want to study someones project. You need to shortly explain what you want to achieve and why it's not working for you. You should post related code too. Use "Improve question" widget.

1 solution

You're doing it wrong way. That's what you want to achieve is called XSLT Transformations | Microsoft Docs[^]. Here you'll find very interesting article: Transform From One XML Structure to Another[^]

Seems, that basically, you want to add <span someproperty="somevalue">...</span> inside each node, depending on its name. So, a hard-coded version may loop through the collection of XElement[^] or XNode[^] and change its content based on your logic. See:
foreach(XElement xele in xdoc.Root.Descendants("pw"))
{
	string tmpVal = xele.Value;
	xele.Name = "p"; //change pw => p
	xele.Value = "";
	xele.Add(new XElement("span", tmpVal));  //add a "span" node! 
	Console.WriteLine("{0}", xele.ToString());
}

result:
<p>
  <span>Paragraph value</span>
</p>


Good luck!
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900