0

私はXMLを持っています:

<PolicyChangeSet schemaVersion="2.1" username="" description="">
  <Note>
    <Content></Content>
  </Note>
  <Attachments>
    <Attachment name="" contentType="">
      <Description></Description>
      <Location></Location>
    </Attachment>
  </Attachments>
</PolicyChangeSet>

XML に入力するメソッドがあります。

public static void GeneratePayLoad(string url, string policyID)
        {
            string attachmentName = policyID.Split(new string[] { "REINSTMT" }, StringSplitOptions.None)[0] + "REINSTMT";

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(AppVars.pxCentralXMLPayloadFilePath);
            XmlNode node = xmlDoc.SelectSingleNode("/PolicyChangeSet");
            node.Attributes["username"].Value = AppVars.Username;
            node.Attributes["description"].Value = "Upload Documents";

            node = xmlDoc.SelectSingleNode("PolicyChangeSet/Note/Content");
            node.InnerText = "The attached pictures were sent by the producer.";

            node = xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachments/Attachment");
            node.Attributes["name"].Value = attachmentName;
            node.Attributes["contentType"].Value = "image/tiff";

            node = xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachments/Attachment/Description");
            node.InnerText = "Combined reinstatement picture file";

            node = xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachments/Attachment/Location");
            node.InnerText = url;

            xmlDoc.Save(AppVars.pxCentralXMLPayloadFilePath);
        }

私の質問は、XML に入力する最適な方法は何ですか? もっと簡単にできる方法があるような気がします。たとえば、単一のノードを複数回選択する必要をなくす方法があると確信しています (現在行っていることです)。皆さんは何をお勧めしますか?最善の方法は何ですか?

4

1 に答える 1

1

シリアライゼーション/デシリアライゼーション戦略を使用することはオプションですが、そのためだけにコードを DTO で汚染したくない場合は、それを避けたい場合があります。XDocumentこの最後のケースでは、次のように、既に述べたように関連するものを使用できます。

var doc = XElement.Parse(
    @"<PolicyChangeSet schemaVersion='2.1' username='' description=''>
    <Note>
        <Content></Content>
    </Note>
    <Attachments>
        <Attachment name='' contentType=''>
        <Description></Description>
        <Location></Location>
        </Attachment>
    </Attachments>
    </PolicyChangeSet>");

doc.Descendants("Note")
   .Descendants("Content").First().Value = "foo";

var attachment = doc.Descendants("Attachments")
                    .Descendants("Attachment").First();

attachment.Attributes("name").First().Value = "bar";
attachment.Attributes("contentType").First().Value = "baz";

...

doc.Save(...);

Loadの代わりに メソッドを使用して、ファイルからParseをロードxmlします。別のオプションです。

于 2012-09-05T15:53:44.630 に答える