Извлечение строки в c # winforms - PullRequest
       167

Извлечение строки в c # winforms

0 голосов
/ 12 октября 2009

У меня есть такой xml-файл

<div class="details">
  <a href="/Details/Empinfo.asp?empid=134">Employee details</a> 
</div>

Теперь я хочу получить empid (т.е. 134) из данного xml-файла в c # winforms. Может кто-нибудь помочь мне, как получить emp id

Заранее спасибо

Ответы [ 6 ]

3 голосов
/ 12 октября 2009

Для быстрого EmpID, см. Следующее:

    string xml = @"<div class=""details""><a href=""/Details/Empinfo.asp?empid=134"">Employee details</a></div>";
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    string strEmpID = node.Attributes[@"href"].Value.ToString().Split(new char[] { '=' })[1];

Если вам нужны все EmpID, то можете сделать что-то вроде следующего:

private List<string> GetAllEmpIDs(string xml, string strTag/*Example: @"href" */, char[] caSplitBy, int nItemNumber /*second item in array, 1*/)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);

    List<string> lstEmpID = new List<string>();
    foreach(XmlNode node in doc.DocumentElement.ChildNodes)
    {
        lstEmpID.Add(node.Attributes[strTag].Value.ToString().Split(caSplitBy)[nItemNumber]);
    }

    return lstEmpID;
}

Использование:

    List<string> lstEmpID= GetAllEmpIDs(@"<div class=""details""><a href=""/Details/Empinfo.asp?empid=134"">Employee details</a></div>",
                @"href",
                new char[] { '=' },
                1
                );

Дайте мне знать, если это не поможет! (0:

1 голос
/ 12 октября 2009
function NameYourFunction(string xmlFile){
   XmlDocument xml = new XmlDocument();
        xml.Load(xmlFile);
        XmlNode xnode = xml.DocumentElement;
        for (int i = 0; i < xnode.ChildNodes.Count; i++)
        {
            string href = xnode.ChildNodes[i].Attributes["href"].Value;
            string empid = href.Substring(href.IndexOf('='),(href.Length -    href.IndexOf('='))+1);
        }

}

Пожалуйста, проверьте это. Еще не пробовал.

1 голос
/ 12 октября 2009
  1. Сначала загрузите файл XML в XMLDocument / XMLReader, затем перейдите к значению атрибута href, которое равно "/Details/Empinfo.asp?empid=134".
  2. Затем используйте это для создания нового класса Uri, а затем используйте свойство Uri.Query, которое даст вам «? Empid = 134».
  3. Теперь найдите первое = и извлеките всю подстроку после того, что должно дать вам 134
0 голосов
/ 19 мая 2015

Я предлагаю прочитать XML-файл как текст, а затем извлечь сотрудника с помощью выражения RegEx. Вот так

Using System.Text.RegularExpression;

public ArraList() GetEmployeeList(string XmlText){ 
  ArrayList lst = new ArrayList();
  RegEx regExp = new RegEx(@"\d{3}");
  MatchCollection mstLst = regExp.Matches(Xmltext);
  foreach(Match iMatch in mstLst){
      lst.Add(iMatch.Value.ToString());
  }

Return lst;
}
0 голосов
/ 12 октября 2009

Попробуйте что-то вроде этого:

using System;
using System.Linq;
using System.Xml.Linq;
using System.Web;

class Example
{
    static void Main()
    {
        String xml = @"<div class=""details"">
              <a href=""/Details/Empinfo.asp?empid=134"">
                Employee details</a> 
            </div>";

        String[] queryString = XElement.Parse(xml)
            .Descendants("a")
            .Attributes("href")
            .FirstOrDefault()
            .Value
            .Split('?');

        String empId = HttpUtility
            .ParseQueryString(queryString[1])["empid"];
    }
}

Я бы не рекомендовал использовать регулярные выражения для чего-то подобного - лучше использовать какой-нибудь XML API (здесь я использую LINQ to XML), а затем анализировать полученную строку.

0 голосов
/ 12 октября 2009

Если вы уверены, что XML-файл не будет содержать другие цифры, которые вы можете просто сделать:

Regex.Match(File.ReadAllText(filename), @"\d+").Value

Также, если у вас есть несколько идентификаторов, вы можете использовать Regex.Matches. В противном случае вам придется проанализировать XML-файл, чтобы найти нужный элемент, как указано в другом ответе.

Обновление по комментариям:

Regex.Match(File.ReadAllText(filename), 
    @"empid=(?<EmployeeID>[^""]+)").Groups["EmployeeID"].Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...