2009-10-12 8 views
0

J'ai un fichier xml comme celui-ciextraction de chaîne en C# WinForms

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

maintenant je veux obtenir le empid (i.e. 134) à partir du fichier xml donnée dans C# WinForms. Quelqu'un peut-il me aider comment obtenir l'ID emp

Merci à l'avance

+0

Lire le fichier xml sous forme de texte puis extraire l'employé en utilisant RegEx Expression – MrAlex6204

Répondre

3

Pour EmpID rapide, voir ci-dessous:

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]; 

Si vous voulez tous les EmpIDs, peut faire quelque chose comme ce qui suit:

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; 
} 

Utilisation:

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

Let je sais, si au-dessus est d'aucune aide! (0:

+0

Oui, je suis très proche de ça. Je vais essayer de vous remercier – Nagu

+0

Je l'ai déjà testé, btw. (0: –

+0

Merci, il fonctionne bien – Nagu

1
  1. charge d'abord le fichier xml dans un XMLDocument/XMLReader, puis arriver à la valeur de l'attribut href qui est « /Details/Empinfo.asp ? empid = 134 ".
  2. Ensuite, utilisez ceci pour instancier une nouvelle classe Uri, puis utilisez la propriété Uri.Query qui vous donnera "? Empid = 134".
  3. Maintenant, regardez pour la première = et extraire l'ensemble subsstring après ce qui devrait vous obtenir 134
+0

URI non valide.: Le format de l'URI n'a pas pu être déterminé car il est affiché comme ceci car l'URL récupère comme ceci "/Details/Empinfo.asp?empid=134" donc il ne reconnaît pas comme un uri valide – Nagu

+0

Vous ne pouvez pas utiliser l'Uri classer et passer à l'étape 3. – logicnp

0

Si vous êtes sûr que le fichier xml ne contiendra pas d'autres chiffres que vous pouvez simplement faire:

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

De même, si vous avez plusieurs ID, vous pouvez utiliser Regex.Matches. Sinon, vous devez analyser le fichier XML pour trouver le bon élément comme indiqué dans une autre réponse.

mise à jour par des commentaires:

Regex.Match(File.ReadAllText(filename), 
    @"empid=(?<EmployeeID>[^""]+)").Groups["EmployeeID"].Value 
+0

Non mon xml peut contenir des alphanumériques aussi comme emp101 – Nagu

+0

@Nagu, pouvez-vous mettre ce détail dans votre réponse? dedans? –

+0

comme ça – Nagu

0

Essayez quelque chose comme ceci:

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"]; 
    } 
} 

Je ne recommande d'utiliser des expressions régulières pour quelque chose comme ça - il est préférable d'utiliser une API XML de certains trier (j'utilise LINQ to XML ici), puis analyser la chaîne résultante.

1
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); 
     } 

} 

Veuillez le vérifier. Je n'ai pas encore essayé.

0

Je suggère de lire le fichier xml sous forme de texte puis extraire l'employé en utilisant l'expression RegEx Comme cette façon

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; 
}