Sitecore Xpath比较两个字段

时间:2018-08-15 12:58:29

标签: asp.net xpath sitecore sitecore8

我希望有一个查询,它查询其父级的名称,然后将导航到内容文件夹下具有相同站点名称的文件夹,并在多列表中显示其下的项目。

基本上,内容树中的结构如下:

  • sitecore
    • 内容
      • 网站名称1
        • (需要在多列表中显示的项目)
      • 网站名称2
        • (需要在多列表中显示的项目)
    • 媒体库
      • 网站名称1
        • PDF1(带有搜索功能的多列表)
      • 网站名称2
        • PDF2(带有搜索的多列表)

当我想开始将相对父代的“名称”与绝对路径的子代的“名称”进行比较时,麻烦就开始了。在Xpath中,它可能会像以下内容中所述:Compare attribute values using Xpath

在这种情况下,到目前为止我有以下查询:

/sitecore/content/*[ancestor-or-self::*[@@templateid='{Template Id of Sitename}']=@@name and @@templateid='{Template Id of Sitename}']

此查询返回Sitename1和Sitename2。

有趣的是,如果我将bij“ Sitename1”的部分替换为“ ancestor-or-se ..”或“ @@ name”,就像这样:

/sitecore/content/*['Sitename1'=@@name and @@templateid='{Template Id of Sitename}']

.. and ..

/sitecore/content/*[./ancestor-or-self::*[@@templateid='{Template Id of Sitename}']='DSW' and @@templateid='{Template Id of Sitename}']

我得到想要的结果:Sitename1。

顺便说一句,我现在正在使用内置的xpath构建器,然后将查询粘贴到“带有搜索的多列表”中。

任何帮助将不胜感激。

修改:
我想我发现,当我启动相对查询(“ ./ancestor :: ...”部分)时,它实际上是相对于我以绝对查询结束的项目。所以我应该有以下查询:

./ancestor-or-self::*[@@templateid='{Template Id of Sitename}' and @@name=ancestor::*[@@templateid='{Template Id of root item aka "sitecore"}']//*[@@templateid={Template Id of Sitename}]]  

这里出现错误“对象必须为字符串类型”,这可能是由于上一个查询的以下部分引起的:

@@name=ancestor::*[@@templateid='{Template Id of root item aka "sitecore"}']//*[@@templateid={Template Id of Sitename}]  

此方法的正确部分不能解析为字符串。因此问题仍然存在,如何使用sitecore xpath从sitecore项中提取纯字符串,以便进行比较。

1 个答案:

答案 0 :(得分:0)

我发现Sitecore至少不支持快速查询的子查询,我认为同样适用于普通查询(另请参见:here中的“不支持子查询”)。现在,这使我开始使用简单的代码来执行两个查询。一种非常简单的方法是从IDatasource继承(在sitecore.buckets.dll中),您需要编写“代码:{class的完整路径},assemblyname.dll”(另请参见:here