इस समय, मैं सॉफ्टवेयर कई एक्सएमएल विन्यास फाइल है कि का एक टुकड़ा प्रबंध कर रहा हूँ। जब सॉफ़्टवेयर का एक नया संस्करण जारी होता है, तो कभी-कभी बेस कॉन्फ़िगरेशन फ़ाइलें बदलती हैं, वर्तमान में स्टार्टअप पर हमारे पास सॉफ़्टवेयर कॉल KDiff है। यदि यह एक परिवर्तन का पता लगाता है, तो यह उपयोगकर्ता को परिवर्तन चुनने के लिए संकेत देता है।प्रोग्रामेटिक एक्सएमएल Diff/में मर्ज सी #
इस दृष्टिकोण के साथ समस्याकि KDiff एक लाइन की तुलना कार्यक्रम और एक्सएमएल के तरीके के बारे में पता नहीं (है
आदर्श रूप में (नोड्स, आदि), मैं प्रोग्राम के रूप में सी # में एक पुस्तकालय के साथ काम करने के लिए चाहते हैं चूंकि हम एक एमएस दुकान हैं) जो दो एक्सएमएल फाइलों को डिफ कर सकते हैं: एक स्रोत एक्सएमएल और एक मौजूदा वर्किंग एक्सएमएल।
और फिर दोनों एक साथ मर्ज कुछ सरल नियमों का उपयोग कर:
- वर्तमान कार्य एक्सएमएल एक नोड कि स्रोत एक्सएमएल, ऐसा नहीं निकालता है है।
- स्रोत एक्सएमएल एक नोड कि वर्तमान कार्य एक्सएमएल, यह नहीं जोड़ करता है।
- तो दोनों एक ही नोड है और मूल्यों भिन्न होते हैं, स्रोत एक्सएमएल के मूल्य के पक्ष में, जब तक यह स्रोत एक्सएमएल के मान "UseExistingValue" पर सेट है।
उदाहरण के लिए, यहाँ "स्रोत" एक्सएमएल है:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="UseExistingValue" Y="UseExistingValue" Z="UseExistingValue" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
और यहाँ "वर्तमान कार्य" एक्सएमएल है:
<Configuration>
<Items>
<Item Id="1" Position="false">
<Location X="123" Y="234" Z="345" />
<Another/>
<Something/>
</Item>
</Items>
</Configuration>
और मर्ज किए गए संस्करण की तरह दिखेगा:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="123" Y="234" Z="345" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
मैं MS XML Diff and Patch Tool को देखा है और यह परिभाषा tely फ़ाइलों को एक साथ विलीन करता है, लेकिन प्रोग्रामेटिक नियमों की अनुमति नहीं देता है जिन्हें मैं परिभाषित करना चाहता हूं।
XMLUnit for Java devs होनहार लगता है, लेकिन इसके बारे में नेट संस्करण अविकसित लगता है, जो दुर्भाग्यपूर्ण है।
किसी के पास स्क्रिप्ट योग्य एक्सएमएल डिफ/मर्ज टूल्स और/या .NET पुस्तकालयों (भुगतान या मुक्त) के लिए कोई सुझाव है?
धन्यवाद।
NuGet से XMLDiffPatch स्थापित करने के लिए http: //www.nuget.org/packages/XMLDiffPatch/ – Contango