XPath-запрос на совпадение - PullRequest
0 голосов
/ 13 декабря 2011

Есть ли способ поиска в документе XML с учетом регистра? В этом посте я вижу поиск с точным соответствием: запрос XPath для точного соответствия

Чего я хочу добиться, так это получить все подходящие элементы в соответствии с моими критериями.

Например, если у меня есть следующий XML:

<Videos>
<Misc  URL="http://ccc/.webm1.webm"  />
<Misc  URL="http://bbb/OGG_2.ogv"  />
<Misc  URL="http://aaa/OGG_3.ogv"  />
<Misc  URL="http://ccc/.webm4.webm"  />
<Misc  URL="http://bbb/OGG_5.ogv"  />
<Misc  URL="http://aaa/OGG_6.ogv"  />
</Videos>

Я хочу получить все узлы, которые содержат или имеют .ogv, аналогично всему, что содержит .webm расширения.

Есть идеи, как это получить?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

//Misc[substring(@URL, string-length(@URL)-3)='.ogv']

Выше используется XPath 1.0, он просто выполняет подстроку и возвращает последние 3 символа для сопоставления с .ogv.

Также, чтобы упростить вышесказанное, используйте XPath 2.0 //Videos/Misc[ends-with(@URL, '.ogv')].

0 голосов
/ 13 декабря 2011

Попробуйте использовать Linq-XML.

XDocument doc = XDocument.Load(file);
var result = doc.Descendants("Misc").Select(p => p.Attribute("URL"))
                     .Where(p => p.Value.EndsWith(".ogv"));
foreach (var t in result)
  Console.WriteLine(t.Value);
...