2013-07-26 3 views
1

Я имею строки, как показано нижеИзвлечение из XML напоминающая строки C#

<ad nameId="\862094\"></ad> 

или запятая seprated, как показано ниже

<ad nameId="\862593\"></ad>,<ad nameId="\862094\"></ad>,<ad nameId="\865599\"></ad> 

Как извлечь значение NameID и хранить в одной строке, как показано ниже

string extractedValues ="862094"; 

или в случае разделительной цепочки выше

string extractedMultipleValues ="862593,862094,865599"; 

Это то, что я начал пытаться с, но не уверен, что

string myString = "<ad nameId="\862593\"></ad>,<ad nameId="\862094\"></ad>,<ad   
        nameId="\865599\"></ad>"; 
string[] myStringArray = myString .Split(','); 
foreach (string str in myStringArray) 
{ 

    xd.LoadXml(str); 
    chkStringVal = xd.SelectSingleNode("/ad/@nameId").Value; 
} 
+0

Гадает, почему этот вход не в чистом 'xml' .. – Anirudha

ответ

1

Пожалуйста, смотрите ниже код, чтобы извлечь все номера в вашем примере:

string value = @"<ad nameId=""\862093\""></ad>,<ad nameId=""\862094\""></ad>,<ad nameId=""\865599\""></ad>"; 
    var matches = Regex.Matches(value, @"(\\\d*\\)", RegexOptions.RightToLeft); 
    foreach (Group item in matches) 
    { 
    string yourMatchNumber = item.Value; 
    } 
2

Поиск:

<ad nameId="\\(\d*)\\"><\/ad> 

Заменить:

$1 

Обратите внимание, что вы должны искать в глобальном масштабе , Пример: http://www.regex101.com/r/pL2lX1

+0

Можете ли вы предоставить код .. Regex given is perfect –

+2

@mhasan Извините, я не владею C#, поэтому я, вероятно, вверх. Просто примените логику из вышеупомянутого регулярного выражения в вашей программе, и он должен работать. Если вы не знаете, как работать с регулярными выражениями на C#, я предлагаю Google. – mart1n

+0

Большое спасибо. Спасибо за вашу помощь. –

1

Попробуйте это;

string s = @"<ad nameId=""\862094\""></ad>"; 
if (!(s.Contains(","))) 
{ 

    string extractedValues = s.Substring(s.IndexOf("\\") + 1, s.LastIndexOf("\\") - s.IndexOf("\\") - 1); 
} 
else 
{ 
    string[] array = s.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
    string extractedMultipleValues = ""; 
    for (int i = 0; i < array.Length; i++) 
    { 
     extractedMultipleValues += array[i].Substring(array[i].IndexOf("\\") + 1, array[i].LastIndexOf("\\") - array[i].IndexOf("\\") - 1) + ","; 
    } 

    Console.WriteLine(extractedMultipleValues.Substring(0, extractedMultipleValues.Length -1)); 
} 
+0

Число запятых, отпечатанных строк не фиксировано .. может быть два, 3 или более –

+1

@mhasan Обновлено. –

+0

'Длина cannaot быть меньше нуля' исключение выбрано в' extractMultipleValues ​​= array [i] .Substring (array [i] .IndexOf ("\\") + 1, array [i] .LastIndexOf ("\\") - array [i] .IndexOf ("\\") - 1) + @ ","; ' –

1

mhasan, здесь идет пример того, что вам нужно (ну почти)

EDITED: полный код (это немного сложнее)

enter image description here

(Извините за но у меня есть некоторые проблемы с тегами в редакторе, я могу отправить код по электронной почте, если вы хотите :))

Небольшое объяснение кода, оно заменяет все ошибки parsePattern в данной строке, поэтому, если заданная строка имеет несколько тегов, разделенных символом «,», конечным результатом будут числа, разделенные символом «,», хранящиеся в переменной анализа. ..

Надеется, что это помогает

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