Динамически создавать XML с помощью c # - PullRequest
4 голосов
/ 17 ноября 2010

Я должен создать XML-файл динамически на основе пользовательского ввода.

Вот то, что я придумал, и я столкнулся с двумя проблемами.

  1. , если существует коллекция одного и того же элемента (MaxOccurs = 10) (например, если пользовательвведено 4 аккаунта, тогда каким должен быть мой код)
  2. Если есть вариант выбора.В зависимости от выбранного элемента, дочерние элементы должны измениться.

Кто-нибудь, пожалуйста, помогите мне.

Заранее спасибо

BB

Мой код:

XElement req = 
    new XElement("order",
        new XElement("client", 
            new XAttribute("id", clientId),
            new XElement("quoteback", 
                new XAttribute ("name",quotebackname)
                )  
            ),
        new XElement("accounting",
            new XElement("account"),
            new XElement("special_billing_id")
            ),
        new XElement("products",
            new XElement(
                **productChoiceType**,
                ***** HERE THE ELEMENTS WILL CHAGE BASED ON  **productChoiceType**           
                )
            )
        )
    );

Ответы [ 3 ]

6 голосов
/ 17 ноября 2010

LINQ пригодится для таких вещей:

XElement req = 
    new XElement("order",
        new XElement("client", 
            new XAttribute("id",clientId),
            new XElement("quoteback", new XAttribute ("name",quotebackname))  
            ),
        new XElement("accounting",
            new XElement("account"),
            new XElement("special_billing_id")
            ),
            new XElement("products", 
                new XElement(productChoices.Single(pc => pc.ChoiceType == choiceType).Name, 
                    from p in products
                    where p.ChoiceType == choiceType
                    select new XElement(p.Name)
              )
          )
      );
2 голосов
/ 17 ноября 2010

Вместо этого используйте объект XmlWriter , по крайней мере, хотя бы проще, чем вы хотите. Затем вы можете структурировать что-то вроде:

XmlWriter w = XmlWriter.Create(outputStream);
w.WriteStartElement("order");

w.WriteStartElement("client");
w.WriteAttributeString("id", clientId);

// ...
w.WriteElementString("product", "1");
w.WriteElementString("product", "2");
w.WriteElementString("product", "3");
w.WriteElementString("product", "4");

// etc....

w.WriteEndElement(); // client

w.WriterEndElement(); // order
0 голосов
/ 17 ноября 2010

Или создайте класс для каждого типа, который вы хотите преобразовать в XML, и используйте XmlSerializer.

<XmlElement("order")> _
Public Class Order
    <XmlElement("accounting")> _
    Dim accounts As List(Of Account)
    ...
End Class

Dim xmlSer as New XmlSerialzer(GetType(Accounting))
xmlSer.Serialize(myXmlWriter, myObjInstance)
...