1

(Webサービスを介して)値をデータベースに保存するために使用するxmlテンプレートがあります。linq を使用して xml 文字列を更新する方法の例を見てきました。例えば...

<Contacts>
    <Contact>
        <FirstName>Petar</FirstName>
        <LastName>Petrovic</LastName>
        <Email>p.petar@someemail.com</Email>
        <Address>Pere Perica 10</Address>
        <ZipCode>1000</ZipCode>
        <City>Belgrade</City>
        <State>Serbia</State>
    </Contact>
</Contacts>

これが更新したい xml ドキュメントである場合は、単に何かを行うだけです。

XElement xmlDoc = new XElement("Contacts", 
                  from c in db.Contacts
                  orderby c.ContactID
                  select new XElement("Contact",
                         new XElement("ContactID", c.ContactID),
                         new XElement("FirstName", c.FirstName),
                         new XElement("LastName", c.LastName)));
xmlDoc.Save(Server.MapPath(@"~/export.xml"));

これはかなりクールです。しかし、属性を除いて本質的に同じノードを更新する必要があります。例えば...

<?xml version="1.0" encoding="utf-8"?>
<dataTemplateSpecification id="id1" name="name1">
  <description>
    <html>text</html>
  </description>
  <templates>
    <template>
      <elements>
        <element id="element0" name="PatientId" display="Patient ID" dataType="String"  visable="true" readOnly="false">
        </element>
        <element id="element1" name="EMPIID" display="EMPI ID" dataType="String" visable="true" readOnly="true">
        </element>
      </elements>
      <dataTypeSpecifications>
        <dataTypeSpecification id="" baseType="KeyValuePair">
          <dictionaryDefinition>
            <item key="-1" value="-SELECT-" />
            <item key="1" value="YES" />
            <item key="0" value="NO" />
          </dictionaryDefinition>
        </dataTypeSpecification>
      </dataTypeSpecifications>

ほら、属性、つまり名前属性と値属性によって区別される同様のノードがあります... linqを使用してそれを更新するにはどうすればよいですか? 名前で要素を選択し、その値を設定するだけのxPathタイプのものを使用して、新しいXelementを選択することを考えていますか? しかし、私はそれを行う方法について少し混乱しています。何か案は?

4

1 に答える 1

1

あなたが提案したように、名前で要素(属性)を選択し、新しい値を割り当てることができます。これであなたの最初の要素を変更しました。

        var xml = XElement.Load("XMLFile1.xml");

        var node = xml.Descendants("element").Where(e => e.Attribute("id").Value == "element0").FirstOrDefault();
        if (node != null)
        {
            node.Attribute("name").Value = "something else";
        }
于 2012-05-29T18:15:34.547 に答える