LINQ到XML,带条件和c#的可变XML结构

本文关键字:XML 结构 条件 LINQ | 更新日期: 2023-09-27 18:02:34

我有一个大问题,刚刚浪费了5个小时。我必须创建一个XML文件,该文件将由数据库reg填充。我有可变结构,在某些情况下会使用特定的子结构。

逻辑很简单。

我必须得到所有的代理,然后在每个机构我都要重复一个周期,把他们想卖/租的房子都找出来。但它不仅仅是房子,还有公寓、车库等等。每个场景都有自己的结构和不同的数据。

这不是全部,必须有一个条件。只在需要时才写入xml子节点。

一段XML示例

<Clients>
    <Client>
        <aggregator/>
        <code/>
        <reference/>
        <contact>
        <secondhandListing>
            <property>
                <code/>
                <reference/>
                <scope/>
                <address>
                <features/>
                <operation>     // variable structure
    1example        <price/>
                    <communityCosts/>
    2example       <price/>
                   <communityCosts/>
                   <depositType/>
                </operation>
            </property>
        </secondhandListing>
谁能给我举个例子说明一下这是怎么做的?到目前为止我归档的是:
var agenciasConectores = //query of Agencys
foreach (var agenciaConector in agenciasConectores)
{
    var imoveisAgencia = // query of homes in each Agency
    XDocument doc = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XElement("Clients",
            from agencia in agenciasConectores
                select new XElement("Client", new XAttribute("ID", agencia.AgencyId),
                new XElement("aggregator", agencia.ConnectorLicense),
                new XElement("code", agencia.Name),
                new XElement("Reference", agencia.Phone),
                new XElement("contact", agencia.Phone),
                new XElement("secondhandListing"),
                new XElement("newbuildListing")
                )));
    foreach (var imovel in imoveisAgencia)
    {
        if (imoveisAgencia.Count() > 1)
        {
            doc.Document.Add(new XElement("property",
                new XElement("code", "codigo"),
                new XElement("reference", "reference"),
                new XElement("scope", "scope"),
                new XElement("address", "address"),
                new XElement("contact", "contact"),
                new XElement("features", "features"),
                new XElement("operation", "operation"),
                new XElement("description", "description")));
        }
    }
}

LINQ到XML,带条件和c#的可变XML结构

当我尝试在Visual Studio中运行此代码时,下面这行会抛出一个异常

doc.Document.Add(new XElement("property",
...

你想做更多这样的事情吗?

doc.Root.Add(new XElement("property",
...

或者更接近于

doc.Descendants("Client")
    .Single(c => c.code == "something")
    .Add(new XElement("property",
    ...

已经找到解决办法了

其简单。

XElement root = new XElement("root");
XElement child = new XElement("Child");
XElement child2 = new XElement(Child2);

然后填充元素

Child.SetValue(a);
child2.Setvalue(b);

和在最后,我只是添加元素到父元素。

root.add(Child,Child2);

但是像这样,我也可以做一些验证(在我的例子中是循环)

If(a>b)
    root.add(child);
else
    root.add(child2);

谢谢你的尝试。我是通过例子来学习的嘿嘿