Rohit Sarkar
Rohit Sarkar

Reputation: 129

How do I insert a string into an empty XML?

I have a string that is in XML format my string is:

<Commits>
    <Repository></Repository>
    <Commit>
        <Author>[email protected]</Author>
        <Commit_Date>2021-06-04 10:55:27 +0530</Commit_Date>
        <Message_Body>Multiple files</Message_Body>
        <PreviousCommit_Id></PreviousCommit_Id> 
        <Commit_Id>8ca4c0612ed785ba200a77763dca68c473f4af17</Commit_Id>
        <Branch_Name>HEAD -> master, origin/master</Branch_Name>
        <Files_List></Files_List>
    </Commit>
</Commits>

I want to insert this string into an XML file that I have already created. How can I do that?

I have another scenario

I have string variable string gitEventXml it contains

<Commits>
    <Repository></Repository>
    <Commit>
        <Author>[email protected]</Author>
        <Commit_Date>2021-06-04 10:55:27 +0530</Commit_Date>
        <Message_Body>Multiple files</Message_Body>
        <PreviousCommit_Id></PreviousCommit_Id>
        <Commit_Id>8ca4c0612ed785ba200a77763dca68c473f4af17</Commit_Id>
        <Branch_Name>HEAD -> master, origin/master</Branch_Name>
        <Files_List></Files_List>
    </Commit>
</Commits>

This as string. In the Repository tag I want to insert .git. The string will look like

<Commits><Repository>.git</Repository>....

How can I achieve it? Can anyone help me with this?

Upvotes: 1

Views: 73

Answers (2)

swx
swx

Reputation: 148

I think this will be more efficient for the second scenario.

XElement eventXml = XElement.Parse(gitEventXml);
string repo = ".git";
XElement tagXmlToInsert = XElement.Parse($"<Repository>{repo}</Repository>");
XElement mainElement = eventXml.Descendants("Commit").FirstOrDefault();
XElement mainElement.AddBeforeSelf(tagXmlToInsert);

Upvotes: 1

Pashyant Srivastava
Pashyant Srivastava

Reputation: 665

Solution of first problem:

string gitEventXml = @"<Commits><Repository></Repository><Commit><Author>[email protected]</Author><Commit_Date>2021-06-04 10:55:27 +0530</Commit_Date><Message_Body>Multiple files</Message_Body><PriviousCommit_Id></PriviousCommit_Id><Commit_Id>8ca4c0612ed785ba200a77763dca68c473f4af17</Commit_Id><Branch_Name>HEAD -> master, origin/master</Branch_Name><Files_List></Files_List></Commit></Commits>";
File.WriteAllText("D:/MyXmlFile.xml", gitEventXml);

Solution for second:

string insertValue = ".git";
string gitEventXml = $"<Commits><Repository>{insertValue}</Repository><Commit><Author>[email protected]</Author><Commit_Date>2021-06-04 10:55:27 +0530</Commit_Date><Message_Body>Multiple files</Message_Body><PriviousCommit_Id></PriviousCommit_Id><Commit_Id>8ca4c0612ed785ba200a77763dca68c473f4af17</Commit_Id><Branch_Name>HEAD -> master, origin/master</Branch_Name><Files_List></Files_List></Commit></Commits>";
File.WriteAllText("D:/MyXmlFile.xml", gitEventXml);

Another dynamic way to insert value:

string insertValue = ".git";
string gitEventXml = $"<Commits><Repository></Repository><Commit><Author>[email protected]</Author><Commit_Date>2021-06-04 10:55:27 +0530</Commit_Date><Message_Body>Multiple files</Message_Body><PriviousCommit_Id></PriviousCommit_Id><Commit_Id>8ca4c0612ed785ba200a77763dca68c473f4af17</Commit_Id><Branch_Name>HEAD -> master, origin/master</Branch_Name><Files_List></Files_List></Commit></Commits>";
if (gitEventXml.Contains("<Repository>"))
{
    string[] parts = gitEventXml.Split("<Repository>");
    gitEventXml = $"{parts[0]}<Repository>{insertValue}{parts[1]}";
}
File.WriteAllText("D:/MyXmlFile.xml", gitEventXml);

Upvotes: 1

Related Questions