2014-11-11 3 views
0

У меня есть XML загружен в строку param как этотвыбрать строку между двумя строки

<param> 
    <ClientID></ClientID> 
    <CarrierSCAC></CarrierSCAC> 
    <StatusCode></StatusCode> 
    <BatchNumber>20</BatchNumber> 
    <SQL> 
    ClientID<21 
    </SQL> 
</param> 

Из этой строки я хочу, чтобы нарезать из ClientID<21, я попробовал некоторые вещи, как этот

 int start = param.IndexOf("<SQL>") + 1; 
     int end = param.IndexOf("</SQL>", start); 
     string result = param.Substring(start, end - start); 

но это дает мне еще один результат, подобный этому

SQL>ClientID<21 

Может любой один момент, что я делаю неправильно?

+0

При получении индекса строки он получает начало этой строки. Поэтому вам нужно не делать 'indexOf (" ") + 1', а скорее добавлять длину строки, которую вы ищете; 'indexOf (" ") + 5' – Sander

+2

Почему бы не использовать синтаксический анализатор xml? было бы намного проще и меньше ошибок. – Sayse

+2

Кстати, было бы не лучше, если бы вы использовали XML-синтаксис вместо этого? –

ответ

3

Для вашей проблемы, ваш код должен быть:

int start = param.IndexOf("<SQL>") + 5; 
int end = param.IndexOf("</SQL>", start); 
string result = param.Substring(start, end - start); 

IndexOf возвращает индекс первого вхождения (в вашем случае будет являться < характером


Но вы должны также рассмотреть прочитав xml с подходящей моделью. Таким образом, вы могли бы создать класс что-то вроде этого (но не уверены в типах данных):

public class Wrapper 
{ 
    public Model Param; 
} 

public class Model 
{ 
    public string ClientID; 
    public string CarrierSCAC; 
    public string StatusCode; 
    public int BatchNumber; 
    public string SQL; 
} 

Затем читает входные данные:

var input = "<param>....</param>"; 
var serializer = new XmlSerializer(typeof(Wrapper)); 
using (TextReader reader = new StringReader(input)) 
{ 
    result = serializer.Deserialize(reader); 
    var sql = result.Param.Sql; // this would be your string you are looking for 
} 

Как и другие в комментариях уже говорилось: Вы должны убедиться, что XML является действительным! Строка SQL ClientID<21 не является допустимой строкой, так как она содержит <.

Смежные вопросы