XmlNodeList xPath для фильтрации узлов - PullRequest
1 голос
/ 03 ноября 2010
XmlNodeList list = null;
list = xmlResult.SelectNodes("/sitecore
                               /result
                                /item
                                 [scWebsitePath='"+sitecoreContextItemPath+"'
                                  and scTemplateId='"+templateId+"' 
                                  and scDateCreated > '"+publishedFrom+"' 
                                  and scDateCreated < '"+publishedTo+"']");

Приведенный выше код возвращает мне список всех "проверенных" узлов.Возможно ли также иметь проверку xPath, если путь есть.«xxx / yyy / zzz /» является частью узла, например, если заданный путь - «xxx / yyy / zzz /», и я хочу, чтобы элементы ниже этого пути были возвращены:

  • "xxx / гггг / zzz / abc / def / ghi "<- будет действительным </li>
  • " xxx / гггг / zzz / abc / def / ghi / jkl "<- будет действительным </li>
  • "xxx / yyy / zzz / aaa / aaa / zzz "<- не будет действительным </li>

Я могу получить доступ к узлу Path, выполнив это:

XmlNode thisScPath = node.SelectSingleNode("scPath");
if (thisScPath == null)
continue;

Так что мне интересноесли я могу сделать что-то вроде:

list = xmlResult.SelectNodes("/sitecore
                               /result
                                /item[scWebsitePath='"+sitecoreContextItemPath+"'
                                      and scTemplateId='"+templateId+"'
                                      and scDateCreated > '"+publishedFrom+"'
                                      and scDateCreated < '"+publishedTo+"'
                                      and scPath = '"+scPath+"/*']");

При удалении недопустимых узлов из списка это избавит меня от стресса из-за плохой производительности.В конечном итоге я могу удалить недействительные элементы с помощью оператора ac # string.IndexOf! = -1, но я бы хотел сделать это с xPath, если это возможно.Это возможно?

1 Ответ

1 голос
/ 03 ноября 2010

Я думаю, что вы хотите проверить

  and contains(scPath, 'xxx/yyy/zzz/')

или

  and starts-with(scPath, 'xxx/yyy/zzz/')

в вашем выражении XPath. Если вы используете реализацию XPath 2.0 из http://www.xqsharp.com/, то вы можете даже использовать регулярное выражение и функцию совпадений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...