2010-08-04 2 views
0

У меня есть нижеЛучший способ получить значение атрибута из HTML текста

<INPUT type=hidden value=2 name=hidItemCount> 
<INPUT type=hidden value="2;undefined;1;SR;Name=Created 12-May-10;Use Selected=; 
DS Mnemonic=L#%%902;List Size=2;Created=Aug 6 2009 ;Amended=May 12 2010 ;|undefined;1;SR;Name=Created 12-May-10; 
Use Selected=;DS Mnemonic=L#ABCD12;List Size=2;Created=Apr 15 2010 ;Amended=May 12 2010 ;|" name=hidItemData> 

От этого мне нужно выяснить значения для DS Мнемоник которая

L#%%902 and L#ABCD12. в этом случае

Каков наилучший способ для этого? Любое регулярное выражение?

Мой подход до сих пор

string source = "<INPUT type=hidden value=2 name=hidItemCount>"; 
source += "<INPUT type=hidden value=2;undefined;1;SR;Name=Created 12-May-10;Use Selected=;"; 
source +="DS Mnemonic=L#%%902;List Size=2;Created=Aug 6 2009 ;Amended=May 12 2010 ;|undefined;1;SR;Name=Created 12-May-10;"; 
source +="Use Selected=;DS Mnemonic=L#ABCD12;List Size=2;Created=Apr 15 2010 ;Amended=May 12 2010 ;| name=hidItemData> "; 

string[] seperator = new string[] { "DS Mnemonic=" }; 
string[] arr1 = source.Split(seperator, StringSplitOptions.None).Skip(1).ToArray(); 

//final result 
string[] arr2 = arr1.ToList().Select(i => i.Split(';').First()).ToArray(); 

Использование C# 3.0

ответ

1

Следующий фрагмент кода возвращает все значения для Mnemonic с помощью регулярных выражений

 Regex r; 
     Match m; 
     r = new Regex(@"Mnemonic=(\S*);", 
     RegexOptions.IgnoreCase | RegexOptions.Compiled); 
     for (m = r.Match(source); m.Success; m = m.NextMatch()) 
     { 
      Console.WriteLine(m.Groups[1] + " at " 
      + m.Groups[1].Index); 
     } 

(\ S *); означает, что вы ищете нулевые или более вхождения символов без пробела, которые заканчиваются ;.

0
public static List<String> getProperty(HtmlDocument document, string element, string attribute, string value) { 

HtmlElementCollection elems = document.GetElementsByTagName(element); 

List<String> ret = new List<String>(); 

foreach(HtmlElement elem in elems) { 

    String valueAtr = elem.GetAttribute(attribute); 

    if(!String.IsNullOrEmpty(valueAtr)) { 

    var pos = valueAtr.indexOf(value); 

    while(pos != -1) { 
     valueAtr = valueAtr.Substring(pos + value.Lenght + 1); // L#%%902;List Size=2;Cr 

     res.Add(valueAtr.SubString(valueAtr.indexof(';'))); 

     pos = valueAtr.indexOf(value); 

    } //while  
    } //if  
} // for 

возвращение ret; }

Я не уверен, что эта работа для 100% индексов может быть неправильной.

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