Лучший способ получить значение атрибута из текста HTML - PullRequest
0 голосов
/ 04 августа 2010

у меня ниже

<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 Mnemonic , который

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

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Следующий фрагмент кода возвращает все значения для 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 голосов
/ 04 августа 2010
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

return ret; }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...