मेरे पास नीचे की तरह संरचित एक एक्सएमएल फ़ाइल है:

<root>
      <DataFields>
        <DataField Id="FORM_HTML" IsArray="FALSE">
          <DataType>
            <DeclaredType Id="File">
            </DeclaredType>
          </DataType>
          <InitialValue>N/A</InitialValue>
          <Description>Form</Description>
          <ExtendedAttributes>
            <ExtendedAttribute Name="FormatString" Value="">
            </ExtendedAttribute>
            <ExtendedAttribute Name="FormatCulture" Value="">
            </ExtendedAttribute>
            <ExtendedAttribute Name="FormatPrecision" Value="0">
            </ExtendedAttribute>
            <ExtendedAttribute Name="FormatTimeZone" Value="0">
            </ExtendedAttribute>
            <ExtendedAttribute Name="Visible" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="DispSearch" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="DispList" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="DispHome" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="ReadOnly" Value="Y">
            </ExtendedAttribute>
            <ExtendedAttribute Name="File">
               <File>"What I want" </File>
            </ExtendedAttribute>
          </ExtendedAttributes>
        </DataField>
       ....
       </DataFields>

</root>

उपरोक्त सिर्फ एक नमूना है, डेटाफिल्ड टैग अलग-अलग आईडी के साथ कई बार दोहराता है, लेकिन एक ही टैग और नामों के साथ।

मैंने नीचे कोशिश की। यह उस आईडी के साथ डेटाफ़ील्ड प्राप्त करता है जो मैं चाहता हूं, लेकिन केवल फ़ाइल टैग की सामग्री को प्रतिस्थापित करने के बजाय, यह 'विस्तारित एट्रिब्यूट्स' टैग के बीच सबकुछ बदल देता है।

var getHTMLFORM = from data in xmlFile.Descendants(nameSpace + "DataField")
                       let customcheck = data.Attribute("Id").Value
                       where customcheck == "FORM_HTML" && customcheck != null
                        select data;
foreach (var i in getHTMLFORM)
 {
    i.Element(nameSpace + "ExtendedAttributes").Value = encodedstring;
 }

यह समझ में आता है कि यह वह नहीं करता जो मैं चाहता हूं क्योंकि इसे 'विस्तारित एट्रिब्यूट्स' टैग का मान मिलता है और इसे बदल देता है। हालांकि i.Element(nameSpace + "ExtendedAttributes").Value, file टैग में केवल वही मान लौटाता है। मैं अभी यह नहीं समझ सकता कि 'फ़ाइल' टैग में मान को कैसे अपडेट किया जाए और अभी भी केवल FORM_HTML डेटाफ़ील्ड तक ही सीमित है।

उस कोड का परिणाम है:

<root>
      <DataFields>
        <DataField Id="FORM_HTML" IsArray="FALSE">
          <DataType>
            <DeclaredType Id="File">
            </DeclaredType>
          </DataType>
          <InitialValue>N/A</InitialValue>
          <Description>Form</Description>
          <ExtendedAttributes>
                "inserted"
          </ExtendedAttributes>
        </DataField>
       ....
       </DataFields>

</root>

मैं जो चाहता हूं वह है:

<root>
      <DataFields>
        <DataField Id="FORM_HTML" IsArray="FALSE">
          <DataType>
            <DeclaredType Id="File">
            </DeclaredType>
          </DataType>
          <InitialValue>N/A</InitialValue>
          <Description>Form</Description>
          <ExtendedAttributes>
            <ExtendedAttribute Name="FormatString" Value="">
            </ExtendedAttribute>
            <ExtendedAttribute Name="FormatCulture" Value="">
            </ExtendedAttribute>
            <ExtendedAttribute Name="FormatPrecision" Value="0">
            </ExtendedAttribute>
            <ExtendedAttribute Name="FormatTimeZone" Value="0">
            </ExtendedAttribute>
            <ExtendedAttribute Name="Visible" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="DispSearch" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="DispList" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="DispHome" Value="N">
            </ExtendedAttribute>
            <ExtendedAttribute Name="ReadOnly" Value="Y">
            </ExtendedAttribute>
            <ExtendedAttribute Name="File">
               <File>"Inserted" </File>
            </ExtendedAttribute>
          </ExtendedAttributes>
        </DataField>
       ....
       </DataFields>

</root>

प्रश्न: मैं 'फ़ाइल' टैग में तत्व को बदलने के बारे में कैसे जाउंगा?

1
Thomas 28 अगस्त 2019, 23:46

1 उत्तर

सबसे बढ़िया उत्तर

आपको केवल विस्तारित एट्रिब्यूट्स एलिमेंट के बजाय फ़ाइल एलिमेंट के मान को बदलने की आवश्यकता है।

फ़ोरैच लूप के अंदर कोड को निम्न में बदलें, यह ExtendedAttributes Element में सभी फ़ाइल तत्वों के मान को अपडेट करेगा:

i.Element(nameSpace + "ExtendedAttributes")। Descendants (nameSpace + "File")। ToList ()। ForEach (फ़ाइल => फ़ाइल। मान = "फ़ाइल के लिए मान");

1
Rashid Ali 29 अगस्त 2019, 01:00