2016-12-06 48 views
0

我有一個XML是作爲傳遞一個字符串變量給我。我想從該XML中獲得特定標籤的價值。以下是我有和我想要實現的XML:String.Split不工作得到價值

<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> 

我知道string.Split();在這裏不起作用,因爲它只需要一個字符。其他替代方案是使用正則表達式,這對我來說似乎有點威脅。雖然我嘗試過使用它,但沒有得到理想的效果。有人可以幫助正則表達式代碼?

+0

爲什麼你不能只解析XML,使它成爲一個對象? – Prajwal

+0

我無法更改代碼。它已經作爲字符串參數傳遞給一個方法,我必須使用該變量。真倒黴:( –

+0

是''和''唯一的標籤不匹配? – Slai

回答

1

你應該使用XML解析,以獲得值,但因爲你是試圖分裂從字符串分割字符串不是char你可以選擇

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

,它看起來非常整潔,乾淨,XML解析

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

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

您還可以選擇喜歡的子

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

我使用了+8,因爲<TYPEID>的長度是8,你也可以選擇string.length來評估結果。

+0

是用XML它可以是輕鬆了很多,但我不能改變現有的代碼。我必須注入內的新功能代碼。謝謝你的代碼,它的工作般的魅力。:) –

+0

但是使用第一種方式xmlData.Split()選項可以讓「索引出界的」異常。對此有何想法? –

+0

@iSahilSharma你必須分享代碼才能看到。 –

1

您可以使用XML的LINQ對象來解析這些。

NB:有在活動元件中的錯字,結束標記應該是/活動,而不是/ ACTION! (我在下面更正)

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;