2012-05-29 31 views
6

Tengo este documento xml y quiero seleccionar nodos por atributo que comienza con '/ employees /'.Cómo seleccionar nodos por atributo que comienza con ... en C#

<table> 
    <tr> 
    <td> 
     <a href="/employees/1.html" title="Employee 1">Employee 1</a> 
    </td> 
    <td>Robert</td> 
    </tr> 
    <tr> 
    <td> 
     <a href="/employees/2.html" title="Employee 2">Employee 2</a> 
    </td> 
    <td>Jennifer</td> 
    </tr> 
</table> 

Así que en C#, me gustaría hacer algo como esto:

parentNode.SelectNodes("//table/tr/th/a[@href='/employees/.....']") 

¿Es esto posible con C#?

Gracias!

+1

¿Se puede usar Linq para Xml? http://msdn.microsoft.com/en-us/library/bb387098.aspx –

Respuesta

17

El simple función starts-with hace lo que necesita:

parentNode.SelectNodes("//table/tr/td/a[starts-with(@href, '/employees/')]") 
+2

P.S. LINQ? Blech ... –

3

usando pura LINQ se puede hacer algo como esto

var doc = XDocument.Parse("YOUR_XML_STRING"); 
var anchors = from e in doc. Descendants("a") where e.Attribute("href").Value.StartsWith("/employee/") select e; 

// ahora se puede seelect cualquier nodo haciendo una combinación de .Parent.Parent .....

1

Entonces, algo como esto?

var xml = @"<table> 
    <tr> 
    <td> 
     <a href=""/employees/1.html"" title=""Employee 1"">Employee 1</a> 
    </td> 
    <td>Robert</td> 
    </tr> 
    <tr> 
    <td> 
     <a href=""/employees/2.html"" title=""Employee 2"">Employee 2</a> 
    </td> 
    <td>Jennifer</td> 
    </tr> 
</table>"; 
var doc = new XmlDocument(); 
doc.LoadXml(xml); 

var employees = doc.SelectNodes("/table/tr/td/a[starts-with(@href, '/employees/')]"); 
DoWhatever(employees); 
Cuestiones relacionadas