6

मुझे इस संरचना के समान मेरी web.config फ़ाइल में एक कस्टम अनुभाग मिला है:एक्सडीटी कॉन्फ़िगर ट्रांसफॉर्म - प्रतिस्थापित करें?

<Messages> 
    <Message id="1'> 
    <Property Name="foo" value="bar" /> 
    </Message> 
    <Message id="2'> 
    <Property Name="foo" value="bar2" /> 
    </Message> 
</Messages> 

मैं इस पर एक कस्टम परिवर्तन लागू करना चाहता हूं कि मैं संपत्ति तत्व के सभी उदाहरणों के मूल्य को बदल सकता हूं नाम = "foo" - लेकिन मैं इसे काम करने के लिए प्रतीत नहीं कर सकता।

मैंने कोशिश की है:

<Messages> 
    <Message> 
    <Property Name="foo" value="updated" xdt:Locator=Match(Name) xdt:Transform="Replace" /> 
    </Message> 
</Mesasges> 

मैं ट्रांसफॉर्म = प्रतिस्थापन = RemoveAll के साथ प्रतिस्थापित करके सभी तत्वों को हटा सकता हूं - किसी भी विचार से मैं सभी मूल्यों को बदलने के लिए कुछ कैसे प्राप्त कर सकता हूं?

+0

हो सकता है कि हमें दिखा तुम क्या करने की कोशिश की? –

+0

क्षमा करें, एक्सएमएल स्वरूपण ने मुझे पहली बार मिला। प्रलेखन से अतिरिक्त स्पष्टीकरण के लिए अब –

उत्तर

7

यह ट्रांसफॉर्म जैसा लगता है: प्रतिस्थापन केवल पहले मिलान किए गए तत्व को documentation on msdn: से प्रतिस्थापित करता है ... यदि एक से अधिक तत्व चुने गए हैं, तो केवल पहले चयनित तत्व को प्रतिस्थापित किया गया है। मैं मैच-शर्तों और SetAttributes, की तरह कुछ के संयोजन का उपयोग करके इस समस्या को हल:

<Messages> 
    <Message> 
    <Property value="updated" xdt:Locator=Condition(@Name='foo') xdt:Transform="SetAttributes(value)" /> 
    </Message> 
</Messages> 
+0

अपडेट किया गया है: _... SetAttributes ट्रांसफॉर्म ** सभी ** चयनित तत्वों को प्रभावित करता है। यह प्रतिस्थापन परिवर्तन गुण से अलग है, जो ** केवल ** पहले तत्व को प्रभावित करता है यदि एकाधिक तत्व चयनित हैं I। –

+0

यह उल्लेख करना महत्वपूर्ण है कि XPath इस काम के लिए पर्याप्त नहीं है। परिवर्तन में एक्सएमएल की संरचना * को * एक्सएमएल की संरचना को बदलने के लिए प्रतिबिंबित करना चाहिए, इसलिए यदि 'संपत्ति' नोड को परिवर्तन की जड़ के रूप में रखा गया तो यह काम नहीं करेगा। और, और भी, यह केवल 'SetAttributes' के साथ काम करता है,' बदलें 'या तो काम नहीं करेगा – SOReader