c#
  • .net
  • xml
  • xpath
  • 2010-11-03 5 views 1 likes 
    1
    XmlNodeList list = null; 
    list = xmlResult.SelectNodes("/sitecore 
               /result 
               /item 
               [scWebsitePath='"+sitecoreContextItemPath+"' 
                and scTemplateId='"+templateId+"' 
                and scDateCreated > '"+publishedFrom+"' 
                and scDateCreated < '"+publishedTo+"']"); 
    

    Выше кода возвращает мне список всех «проверенных» узлов. Можно ли также проверить xPath на путь, т. Е. «Ххх/ууу/ZZZ /» является частью узла, например, если данный путь является «ххх/ууу/ZZZ /» и я хочу, чтобы пункты ниже этого пути должны быть возвращены:XmlNodeList xPath для отфильтрования Узлы

    • «XXX/YYY/ZZZ/а/Защита/ГХИ "< - будет действительного
    • "хой/ууу/ZZZ/а/Защита/ГХИ/JKL" < - будет действительным
    • " хая/ууу/ZZZ/ааа/ааа/ZZZ»< - не будет действительного

    я могу получить доступ к пути узла справляется ИНГ это:

    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+"/*']"); 
    

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

    +0

    @Alejandro: Можете ли вы объяснить, почему «xxx/yyy/zzz/aaa/aaa/zzz« '« недействительно? » Он также начинается с 'xxx/yyy/zzz /' как двух других. –

    ответ

    1

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

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

    или

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

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

    +1

    +1 Правильный ответ. – 2010-11-03 16:27:36

    +0

    Поисковый механизм, который я использую, служит для результатов на основе System.Xml.XmlDocument. К сожалению, я не могу изменить тип результатов, которые я получаю здесь. Можно ли все еще использовать реализацию xPath 2.0, о которой вы упомянули в своем ответе, и есть ли бесплатная реализация этого Xpath 2.0? (Я разрабатываю для коммерческого использования и стоит 200 долларов) – Younes

    +0

    @Alejandro: Спасибо, что редактировал мой вопрос, чтобы сделать его более читаемым. – Younes

    Смежные вопросы