我有一个类可以创建各种不同的XML方案。我使用条件运算符为可选元素和属性通过一个(非常长)语句创建各种动态XDocument。解析XDocument的友好方法
我现在需要将XDocuments转换回类,但是因为它们来自不同的方案,所以许多元素和子元素可能是可选的。我知道这样做的唯一方法是使用很多if语句。
这种方法似乎不是很LINQ,并且比创建XDocument时使用了更多的代码,所以我想知道是否有更好的方法来做到这一点?
一个例子是得到
<?xml version="1.0"?>
<root xmlns="somenamespace">
<object attribute1="This is Optional" attribute2="This is required">
<element1>Required</element1>
<element1>Optional</element1>
<List1>
Optional List Of Elements
</List1>
<List2>
Required List Of Elements
</List2>
</object>
</root>
进入
public class Object()
{
public string Attribute1;
public string Attribute2;
public string Element1;
public string Element2;
public List<ListItem1> List1;
public List<ListItem2> List2;
}
在更LINQ友好的方式莫过于:
public bool ParseXDocument(string xml)
{
XNamespace xn = "somenamespace";
XDocument document = XDocument.Parse(xml);
XElement elementRoot = description.Element(xn + "root");
if (elementRoot != null)
{
//Get Object Element
XElement elementObject = elementRoot.Element(xn + "object");
if(elementObject != null)
{
if(elementObject.Attribute(xn + "attribute1") != null)
{
Attribute1 = elementObject.Attribute(xn + "attribute1");
}
if(elementObject.Attribute(xn + "attribute2") != null)
{
Attribute2 = elementObject.Attribute(xn + "attribute2");
}
else
{
//This is a required Attribute so return false
return false;
}
//If, If/Elses get deeper and deeper for the next elements and lists etc....
}
else
{
//Object is a required element so return false
return false;
}
}
else
{
//Root is a required element so return false
return false;
}
return true;
}
更新:我只想澄清ParseXDocument方法在“Object”类中。每次接收到xml文档时,Object类实例都会更新其中一些或全部值。
谢谢DTB-抱歉应该让自己更清楚。我没有创建一个新类,我正在更新现有类中的值。通过定期发送新值,并且每个xml文档都会更新一些值到所有值。 ParseXDocument方法将在“Object”类中。 – Oli