现在我有
doc = new XDocument(
new XElement(xmlns + "displayMLResponse",
new XAttribute("xmlns", "http://www.peek.se/DisplayML/"),
new XAttribute("version", "1.12"),
new XAttribute("dateTime", date),
new XElement("getStatusResponse",
new XElement("systemInformation",
systemInformationList.Select(info => new XElement("item",
new XElement("name", info.name),
new XElement("value", info.value))).Where(item => item != null)),
responceList.Select(fault => responceList.Count != 0 ?
new XElement("faults",
new XElement("systemFault",
new XElement(fault.faultType,
new XAttribute("description", fault.description),
fault.name.Length == 0 ? new XAttribute("name", fault.name) : null,
fault.size.Length == 0 ? new XAttribute("size", fault.size) : null)))
: new XElement("OK"))
)));
问题是如果 responceList 为空,则不会添加new XElement("OK")
,因为它不会评估responceList.Select(..)
内的内容,因为它是空的。
无法解决我必须做的问题。
问题是如果添加元素错误,如果有其他添加元素确定
我正在尝试创建:
<displayMLResponse xmlns="http://www.peek.se/DisplayML/" version="1.12"
dateTime="2001-12-17T09:30:47">
<getStatusResponse>
<systemInformation>
<item>
<name>Manufacturer</name>
<value>PEEK</value>
</item>
<item>
<name>Version</name>
<value>1.0.0</value>
</item>
</systemInformation>
<OK/>
</getStatusResponse >
</displayMLResponse>
确定替换为:
<faults>
<systemFault>
<missingTemplateFault name="templateAlfa"/>
</systemFault>
<systemFault>
<missingFontFault name="arial" size="18"/>
</systemFault>
</faults>
如果有任何错误,在这种情况下 responceList 是一个错误列表
答案 0 :(得分:0)
responceList.Select(lamba)是一个'select函数',它将为responseList中的每个项运行_once,以决定它是否包含在输出中,因此
fault => responceList.Count != 0 ? ...
如果responseList处于非空状态,将仅在ALL处运行,因此是多余的。
我想你想要:
...
new XElement("value", info.value))).Where(item => item != null)),
responceList.Count != 0 ? responceList.Select(fault =>
new XElement("faults",
new XElement("systemFault",
new XElement(fault.faultType,
new XAttribute("description", fault.description),
fault.name.Length == 0 ? new XAttribute("name", fault.name) : null,
fault.size.Length == 0 ? new XAttribute("size", fault.size) : null)))
: new XElement("OK"))
即你在内部选择之外进行默认,所以它会被调用。
答案 1 :(得分:0)
由于我没有得到答案,我将其添加为解决方法。
doc = new XDocument(
new XElement(xmlns + "displayMLResponse",
new XAttribute("xmlns", "http://www.peek.se/DisplayML/"),
new XAttribute("version", "1.12"),
new XAttribute("dateTime", date),
new XElement("getStatusResponse")));
XElement ele = doc.Root.Element("getStatusResponse");
if (systemInformationList.Count != 0)
{
ele.Add(new XElement("systemInformation",
systemInformationList.Select(info => new XElement("item",
new XElement("name", info.name),
new XElement("value", info.value))).Where(item => item != null)));
}
if(responceList.Count != 0)
{
ele.Add(responceList.Select(fault =>
new XElement("faults",
new XElement("systemFault",
new XElement(fault.faultType,
new XAttribute("description", fault.description),
fault.name.Length == 0 ? new XAttribute("name", fault.name) : null,
fault.size.Length == 0 ? new XAttribute("size", fault.size) : null)))));
} else
{
ele.Add(new XElement("OK"));
}