2012-05-29 3 views
6

У меня есть этот XML-документ, и я хочу выбрать узлы по атрибуту, который начинается с '/ employees /'.Как выбрать узлы по атрибуту, который начинается с ... в 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> 

Таким образом, в C#, я хотел бы сделать что-то вроде этого:

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

Возможно ли это с C#?

Спасибо!

+1

Можете ли вы использовать Linq для Xml? http://msdn.microsoft.com/en-us/library/bb387098.aspx –

ответ

17

Простой starts-with функции делает то, что вам нужно:

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

P.S. LINQ? Blech .... –

0

Конечно, вы можете загрузить свой XML в экземпляр XDocument и использовать метод XPathSelectElements для поиска с использованием вашего выражения.

3

с использованием чистым LINQ вы можете сделать что-то вроде этого

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

// теперь вы можете seelect любого узла, выполнив комбинацию .Parent.Parent .....

1

Итак, что-то вроде этого?

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