如果有多个其他节点具有相同的属性,如何修补指定的节点?
我需要在ContentSearch部分修补分析器的捷克语,但所有节点都以
开头< mapEntry type =" Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry,Sitecore.ContentSearch.LuceneProvider ">
部分配置如下所示
...</maEntry>
<mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
<param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
<param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
<param hint="name">ar-AE</param>
</param>
</param>
<param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
<param desc="defaultAnalyzer" type="Lucene.Net.Analysis.AR.ArabicAnalyzer, Lucene.Net.Contrib.Analyzers">
<param hint="version">Lucene_30</param>
</param>
</param>
</mapEntry>
<mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
<param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
<param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
<param hint="name">pt-BR</param>
</param>
</param>
<param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
<param desc="defaultAnalyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.Contrib.BrazilianAnalyzer, Sitecore.ContentSearch.LuceneProvider">
<param hint="version">Lucene_30</param>
</param>
</param>
</mapEntry>
<mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
<param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
<param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
<param hint="name">cs-CZ</param>
</param>
</param>
<param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
<param desc="defaultAnalyzer" type="Lucene.Net.Analysis.Cz.CzechAnalyzer, Lucene.Net.Contrib.Analyzers">
<param hint="version">Lucene_30</param>
</param>
</param>
</mapEntry>
<mapEntry>...
我需要修补(在我们的示例中)第二个节点中的defaultAnalyzer 。但是第二个节点不是现实生活中的第二个节点,但它可能是第三个,第七个节点......我想我需要找到&#34; mapEntry&#34;节点由指定的内部节点组成。
如果我使用这个
<map hint="list:Add">
<!-- Patch analyzer for Czech language -->
<mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
<param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
<param desc="defaultAnalyzer" type="Lucene.Net.Analysis.Cz.CzechAnalyzer, Lucene.Net.Contrib.Analyzers">
<patch:attribute name="type">MySolution.MetroAsciiFoldingAnalyzer, MySolution</patch:attribute>
</param>
</param>
</mapEntry>
</map>
它将修补第一个节点。
我在这个问题中找到了类似的东西Select node based on child node value in Web.config Transform,但据我所知,我会用我的自定义节点替换整个节点,但是......这是必要的吗?
答案 0 :(得分:5)
您链接的答案使用SlowCheetah进行转换,我认为您正尝试使用Sitecore config patch进行此操作...
因为您正在根据子值选择节点,所以可以使用contains
函数来检查值。但是您只能修补该特定节点,您无法为查询选择它。所以你基本上必须替换整个节点。
我建议您先删除现有的cs-CZ
条目,然后添加自己的条目。请注意,我必须使mapEntry
节点更加独特,因此我添加了desc
属性,否则它会覆盖第一个匹配项(在本例中为ja-JP)
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" >
<sitecore>
<contentSearch>
<indexConfigurations>
<defaultLuceneIndexConfiguration>
<analyzer>
<param desc="map">
<map>
<mapEntry patch:instead="*[contains(.,'cs-CZ')]">
<patch:delete />
</mapEntry>
<mapEntry desc="cs-CZ Analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
<param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
<param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
<param hint="name">cs-CZ</param>
</param>
</param>
<param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
<param desc="defaultAnalyzer" type="MySolution.MetroAsciiFoldingAnalyzer, MySolution">
<param hint="version">Lucene_30</param>
</param>
</param>
</mapEntry>
</map>
</param>
</analyzer>
</defaultLuceneIndexConfiguration>
</indexConfigurations>
</contentSearch>
</sitecore>
</configuration>