2013-02-05 27 views
5

Tôi có XML sau trong cấu hình web của mình và tôi muốn chọn một thuộc tính để xóa bằng cách sử dụng biến đổi web.config, nhưng tôi muốn chọn phần tử để xóa dựa trên giá trị của một trong các phần tử con.Chọn nút dựa trên giá trị nút con trong Web.config Chuyển đổi

web.config của tôi là một cái gì đó như thế này:

<configuration> 
    <sitecore> 
     <scheduling> 
      <agent type="Sitecore.Tasks.DatabaseAgent"> 
      <param desc="database">core</param> 
      </agent> 
      <agent type="Sitecore.Tasks.DatabaseAgent"> 
      <param desc="database">master</param> 
      </agent> 
     </scheduling> 
    </sitecore> 
</configuration> 

Tôi đã thử những điều sau đây để cố gắng chọn các yếu tố đại lý thứ hai để xóa dựa trên yếu tố con <param desc="database">master</param> nhưng không thành công.

<configuration> 
    <sitecore> 
     <scheduling> 
      <!-- Attempt 1 --> 
      <agent type="Sitecore.Tasks.DatabaseAgent" 
       xdt:Transform="Remove" 
       xdt:Locator="XPath(configuration/sitecore/scheduling/agent/param[text()='master'])"/> 

      <!-- Attempt 2 --> 
      <agent type="Sitecore.Tasks.DatabaseAgent" 
       xdt:Transform="Remove"> 
      <param desc="database" 
        xdt:Locator="XPath([text()='master'])"/> 
      </agent> 
     </scheduling> 
    </sitecore> 
</configuration> 

Trả lời

6

Như đã trả lời ở this question thuộc tính xdt:Locator cần phải sử dụng cú pháp Condition. Vì vậy, bộ chọn bắt buộc là:

<agent type="Sitecore.Tasks.DatabaseAgent" 
     xdt:Transform="Remove" 
     xdt:Locator="Condition(param/@desc='database' and param/text()='master')" /> 
+0

Nếu bạn muốn khớp ' master', xpath này sẽ chính xác hơn: 'param [@ desc = 'database']/text() = 'master''. Nếu không, bạn có thể có khả năng khớp với ' master'. –

-1

Chỉ cần thêm /.. vào cuối cùng, mà nên làm điều đó ..

ví dụ

XPath(configuration/sitecore/scheduling/agent/param[text()='master']/..) 
+0

... vào cuối bộ lọc nào? –

+0

bạn có thể cần '//' ở mặt trước, nhưng nếu bạn có thể loại bỏ phần tử 'param' với lựa chọn của bạn, thì'/.. 'nên làm điều đó – Martin

2

Chỉ cần sử dụng trình vá cấu hình riêng của Sitecores. Điều này sẽ loại bỏ thiết lập của bạn:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <scheduling> 
     <agent patch:instead="*[@type='Sitecore.Tasks.DatabaseAgent' and param='master']"> 
     </agent> 
    </scheduling> 
</sitecore> 
</configuration> 

Để biết thêm thông tin, xem ở đây:

http://intothecore.cassidy.dk/2009/05/working-with-webconfig-include-files-in.html http://www.thescrewballdivision.com/playing-with-sitecore-include-files

+0

Tính năng vá Sitecore không thực sự là thứ tôi muốn trong trường hợp như tôi muốn sử dụng biến đổi web.config để tạo các tệp web.config khác nhau dựa trên môi trường. Vì vậy, một môi trường sẽ loại bỏ nút xml, trong khi môi trường đó sẽ được để lại như một môi trường khác. –

Các vấn đề liên quan