Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Как задать регистронезависимый запрос XPath


Автор: kolchakA 11.7.2010, 18:45
Использую следующий код:
Код

Sgml.SgmlReader rdr = new Sgml.SgmlReader();
XmlDocument doc = new XmlDocument();
rdr.Href = "page.htm";
doc.Load(rdr);
XmlElement elem = (XmlElement)doc.SelectSingleNode("//td[@class='myclass']");


myclass в теле страницы может писаться как Myclass и в других вариантах сочетаний регистров букв. Как задать запрос XPath, чтобы он был регистронезависимым? 

Автор: diadiavova 11.7.2010, 20:25
XML - регистрозависимый язык, так что пытаться решить задачу чисто средствами XPath - в данном случае неправильно. Выбери элементы td (все) и обработай коллекцию в коде.
Код

XmlElement elem = (XmlElement)((IEnumerable<XmlNode>)doc.SelectNodes("//td").Where(
                  x => string.Compare( x.GetAttribute("class"), "myclass", true) == 0)[0]);
как-то так smile 

Автор: magelan 13.7.2010, 17:14
Написать ЖОсткий XPath. Буковки обычно в переменные выносят но можно и так:

Код

//td[translate(@class,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='myclass']


работать будет со скоростью паравоза "братьев Черепановых", но будет.


upd: можно ускориться, если имя класса не переменная
Код

//td[translate(@class,'ACLMSY','aclmsy')='myclass']


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)