2016-12-06 20 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()を知っています。 1文字しか必要ないのでここでは機能しません。他の代替は私に少し脅かすような正規表現を使用することです。私はそれを使用しようとしましたが、望みの結果を得られません。誰かが正規表現のコードを助けることができますか?

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

あなたはまた、選択することができますSUBSTRINGなどの

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

<TYPEID>の長さが8であるため、+ 8を使用しました。結果を評価するためにstring.lengthを選択することもできます。

+0

はい、XMLを使用するとかなり楽になりますが、既存のコードを変更することはできません。コード:)ありがとうコードのために、それは魅力のように働いた:) –

+0

しかし、最初のアプローチを使用してxmlData.Split()オプションは、 "インデックスは、バインドされていない"例外を与えます。それに関するどんな考え? –

+0

@iSahilSharmaあなたは見るためにコードを共有する必要があります。 –

1

XML Linqオブジェクトを使用してこれらを解析できます。

NB:ACTIVITY要素にタイプミスがあります。終了タグは/ ACTIVITYでなければなりません。 (私は以下で修正しました)

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; 
関連する問題