我正在尝试创建以下XML元素:
<result>
<object1>VALUE_1</object1>
<object2>VALUE_2</object2>
<object3>VALUE_3</object3>
<object4>VALUE_4</object4>
</result>
我有以下代码:
XElement xResult = new XElement("node_results",
from
a in entityResult
select new XElement("result"
, new XElement("object1", a.VALUE_1
, new XElement("object2", a.VALUE_2)
, new XElement("object3", a.VALUE_3)
, new XElement("object4", a.VALUE_4)
)
);
此代码生成此XML:
<node_results>
<result>
<object1>VALUE_1</object1>
<object2>VALUE_2</object2>
<object3>VALUE_3</object3>
<object4>VALUE_4</object4>
</result>
</node_results>
如何在没有标记“node_results”的情况下生成生成的xml?
我已经使用过这些代码,但会产生错误:
XElement xResult =
from
a in entityResult
select new XElement("result"
, new XElement("object1", a.VALUE_1
, new XElement("object2", a.VALUE_2)
, new XElement("object3", a.VALUE_3)
, new XElement("object4", a.VALUE_4)
);
or
XElement xResult = new XElement("result",
from
a in entityResult
select
new XElement("object1", a.VALUE_1)
, new XElement("object2", a.VALUE_2)
, new XElement("object3", a.VALUE_3)
, new XElement("object4", a.VALUE_4)
)
);
答案 0 :(得分:0)
entityResult
显然是一个结果数组,因此您无法将其分配给XElement,但必须创建它们的IEnumerable。
这应该有效:
var xResults =
from
a in entityResult
select new XElement("result"
, new XElement("object1", a.VALUE_1
, new XElement("object2", a.VALUE_2)
, new XElement("object3", a.VALUE_3)
, new XElement("object4", a.VALUE_4)
);
重要的区别是xResults将是IEnumerable<XElement>
,因此结果如下:
<result>
<object1>VALUE_1</object1>
<object2>VALUE_2</object2>
<object3>VALUE_3</object3>
<object4>VALUE_4</object4>
</result>
<result>
<object1>VALUE_1</object1>
<object2>VALUE_2</object2>
<object3>VALUE_3</object3>
<object4>VALUE_4</object4>
</result>
...
因此,您需要将它们包装在根元素中。第二种方法是枚举其中一个结果:
XElement xResult = new XElement("result"
, new XElement("object1", entityResult[0].VALUE_1
, new XElement("object2", entityResult[0].VALUE_2)
, new XElement("object3", entityResult[0].VALUE_3)
, new XElement("object4", entityResult[0].VALUE_4) );
这实际上取决于你需要或想做什么。
要防止自闭标记,只需用空字符串替换空值:
XElement xResult = new XElement("result"
, new XElement("object1", entityResult[0].VALUE_1 ?? ""
, new XElement("object2", entityResult[0].VALUE_2 ?? "")
, new XElement("object3", entityResult[0].VALUE_3 ?? "")
, new XElement("object4", entityResult[0].VALUE_4 ?? "") );
?? 运算符检查,如果左侧等于null,如果不是,则输出此左侧值,否则输出右侧值。
EDIT2:显然这不起作用 - 所以另一个解决方案 - How do you force explicit tag closing with Linq XML?。看看R. Martinho Fernandes的答案 - 他有一个完整的例子来创建一个解决你的问题的自定义XMLWriter。
答案 1 :(得分:0)
我假设entityResult
是一个只包含单个元素的集合。
var a = entityResult.Single();
XElement xResult = XElement("result",
new XElement("object1", a.VALUE_1),
new XElement("object2", a.VALUE_2),
new XElement("object3", a.VALUE_3),
new XElement("object4", a.VALUE_4));