PowerShell का उपयोग करके XML फ़ाइलों में मूल्यों को कैसे संशोधित करें / बनाएं?


24

मैं जानना चाहूंगा कि क्या PowerShell का उपयोग करके XML फ़ाइलों में मूल्यों को संशोधित करना / बनाना संभव है। मूल रूप से मुझे इसमें दिलचस्पी है:

  • XML फ़ाइल में मानों को संशोधित करें या यदि वे मौजूद नहीं हैं तो उन्हें बनाएं (यानी मुझे आइटम को खोजने की आवश्यकता है, अगर मौजूद नहीं है और मूल्य को संशोधित करें)
  • उन लोगों की तरह एक ही XML फ़ाइल में अलग XML सिंटैक्स के साथ डील करें:

सिंटैक्स 1:

<सेटिंग्स>
  <सेटिंग आईडी = "स्थान 2" मूल्य = "बार्सिलोना, स्पेन" />
  <सेटिंग id = "Location2id" मान = "zmw: 00000.1.08181" />
</ सेटिंग्स>

सिंटैक्स 2:

<सेटिंग्स>
    <Musicplayer>
        <Crossfade> 0 </ crossfade>
        <Queuebydefault> झूठी </ queuebydefault>
    </ Musicplayer>
</ सेटिंग्स>

सिंटैक्स 3:

<सेटिंग्स>
    <Skinsettings>
        <सेटिंग प्रकार = "बूल" नाम = "skin.confluence.HomepageHideRecentlyAddedVideo"> गलत </ सेटिंग>
    </ Skinsettings>
</ सेटिंग्स>

किसी भी मदद को बहुत सराहा जाएगा।

धन्यवाद।

जवाबों:


36

PowerShell पूरी तरह से XML फ़ाइलों से निपटने का समर्थन करता है।

उदाहरण के लिए, यदि हम आपके द्वारा आपूर्ति किए गए पहले ब्लर्ब को लेते हैं और इसे settings.xmlफ़ोल्डर "C: \ blah" में नामित XML फ़ाइल में पेस्ट करते हैं , तो आप प्रत्येक सेटिंग की आईडी इस प्रकार प्राप्त कर सकते हैं:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.setting.id

कौन सा रिटर्न:

Location2
Location2id

तथा

$myXML.settings.setting.value

रिटर्न:

Barcelona, Spain
zmw:00000.1.08181

यदि हम सिंटैक्स # 2 में आपके द्वारा दिए गए ब्लर्ब के साथ एक्सएमएल फ़ाइल सामग्री को प्रतिस्थापित करते हैं:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade

रिटर्न:

0

पढ़ने के लिए crossfade, इसे बदलें (2), और वापस सहेजें:

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade = 2
$myXML.Save("C:\blah\settings.xml")

टिप्पणियों के बाद संपादित करें:

एक्सएमएल तत्वों को स्वयं बदलने के लिए (जैसा कि बार्सिलोना उदाहरण में) थोड़ा पेचीदा मामला है, क्योंकि आप एक्सएमएल संरचना को ही संपादित कर रहे हैं, न कि इसमें मौजूद डेटा को।

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.ChildNodes.Item(0).value = "New York, USA"
$myXML.Save("C:\blah\settings.xml")

Skinsettings उदाहरण के लिए, कुछ इस तरह की कोशिश करें:

$myXML.settings.skinsettings.setting."#text" = "true"

इन संसाधनों की जाँच करें:


जवाब के लिए धन्यवाद। मैंने आपके सुझाव पढ़े हैं और मैं सफलता के बिना बार्सिलोना से न्यूयॉर्क के लिए पहली बूँद में id = "Location2" के मान को अद्यतन करने का प्रयास कर रहा हूँ। तीसरे बूँद के साथ भी ऐसा ही है ("सच" में बदलने की कोशिश)। मैं इस प्रकार के मूल्यों को कैसे ढूँढ / संशोधित कर सकता हूँ?
सेरियोफिलो

मैं उस नोड का चयन करने की कोशिश कर रहा हूं जिसे मैं निम्नलिखित का उपयोग करके बदलना चाहता हूं $MyXML.SelectSingleNode("/settings/skinsettings/setting[@type='bool' and @name='skin.confluence.HomepageHideRecentlyAddedVideo']")लेकिन, मैं "झूठे" से "सच" में मूल्य कैसे बदल सकता हूं। या मैं इस तरह एक नोड कैसे बना सकता हूं अगर यह मौजूद नहीं है?
सेरीओफिलो

1
मेरा संपादन देखें। मैंने कुछ और जानकारी जोड़ी। :)
ᴇc --ιᴇ007
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.