Sahil Sharma
Sahil Sharma

Reputation: 1899

String.Split not working to get values

I have an XML which is passes as a string variable to me. I want to get the value of specific tags from that XML. Following is the XML I have and what I'm trying to achieve:

<code>
string xmlData = @"  
<HEADER>
    <TYPE>AAA</TYPE>
    <SUBTYPE>ANNUAL</SUBTYPE>
    <TYPEID>12345</TYPEID>
    <SUBTYPEID>56789</SUBTYPEID>
    <ACTIVITY>C</ACTION>
</HEADER>";

var typeId = data.Split("<TYPEID>")[0];      //Requirement
var activity = data.Split("<ACTIVITY>")[0];  //Requirement
</code>

I know string.Split(); doesn't work here as it requires a single character only. Other alternate is to use regex which seems a bit threatening to me. Although I have tried to work with it but doesn't getting the desired result. Can someone help with the regex code?

Upvotes: 0

Views: 118

Answers (2)

Terry Lennox
Terry Lennox

Reputation: 30705

You can use XML Linq objects to parse these.

NB: There is a typo in the ACTIVITY element, the closing tag should be /ACTIVITY, not /ACTION! (I've corrected below)

string xmlData = @"<HEADER>
                <TYPE>AAA</TYPE>
                <SUBTYPE>ANNUAL</SUBTYPE>
                <TYPEID>12345</TYPEID>
                <SUBTYPEID>56789</SUBTYPEID>
                <ACTIVITY>C</ACTIVITY>
            </HEADER>";

            var doc = XDocument.Parse(xmlData);

            var typeId = doc.Root.Elements("TYPEID").First().Value;
            var activity = doc.Root.Elements("ACTIVITY").First().Value;

Upvotes: 1

Mohit S
Mohit S

Reputation: 14064

You should have used XML Parsing to get the values but since you are trying split to split a string from a string and not char you can choose

string typeId = xmlData.Split(new string[] { "<TYPEID>" }, StringSplitOptions.None)[1];
string typeIdVal = typeId.Split(new string[] { "</TYPEID>" }, StringSplitOptions.None)[0];

and it looks very neat and clean with XML Parsing

XmlDocument xmlDoc= new XmlDocument(); 
xmlDoc.Load("yourXMLFile.xml"); 

XmlNodeList XTypeID = xmlDoc.GetElementsByTagName("TYPEID");
string TypeID = XTypeID[0].InnerText;

You can also choose SubString like

string typeidsubstr = xmlData.Substring(xmlData.IndexOf("<TYPEID>") + 8, xmlData.IndexOf("</TYPEID>") - (xmlData.IndexOf("<TYPEID>") + 8));

I used +8 because the length of <TYPEID> is 8 you can also choose it string.length to evaluate the result.

Upvotes: 1

Related Questions