我有一些遗留应用程序的非标准XML:
<PODRoot>
<RowData>
<PODItem>Item243</PODItem>
<StoragePath>PODItem66</StoragePath>
<ID>-13</ID>
<PODType>3</PODType>
<Description>Transfer to MPF PODs</Description>
<MemoString></MemoString>
<PODLink>
<LinkType>1</LinkType>
<Location>HTMLPage1.htm</Location>
<Description>HTMLPage1.htm</Description>
</PODLink>
<PODLink>
<LinkType>2</LinkType>
<Location>HTMLPage2.htm</Location>
<Description>HTMLPage2.htm</Description>
</PODLink>
...
并尝试在SL4应用程序中执行以下操作,该应用程序不适用于PODLink节点:
List<PODNode> Nodes = (List<PODNode>)from podNode in doc.Descendants("RowData")
select new PODNode
{
ItemName = podNode.Element("PODItem").Value,
StoragePath = podNode.Element("StoragePath").Value,
ID = Convert.ToInt32(podNode.Element("ID").Value),
PODNodeType = (NodeType)Convert.ToInt32(podNode.Element("PODType").Value),
Description = podNode.Element("Description").Value,
Comment = podNode.Element("MemoString").Value,
//Links = (List<PODLink>)from podLink in podNode.Descendants("PODLink")
// select new PODLink
// {
// LinkType = podLink.Element("LinkType").Value,
// Location = podLink.Element("Location").Value,
// Description = podLink.Element("Description").Value
// };
};
以下是相关课程:
public class PODNode
{
public NodeType PODNodeType;
public string ItemName = string.Empty;
public int ID;
public string StoragePath = string.Empty;
public string Description = string.Empty;
public string Comment = string.Empty;
public List<PODNode> Nodes;
public List<PODLink> Links;
}
任何想法,是否有可能,我可以让注释掉的部分有效吗?
答案 0 :(得分:2)
试试这个:
List<PODNode> Nodes = (from podNode in doc.Descendants("RowData")
select new PODNode
{
ItemName = podNode.Element("PODItem").Value,
StoragePath = podNode.Element("StoragePath").Value,
ID = Convert.ToInt32(podNode.Element("ID").Value),
PODNodeType = (NodeType)Convert.ToInt32(podNode.Element("PODType").Value),
Description = podNode.Element("Description").Value,
Comment = podNode.Element("MemoString").Value,
Links = (from podLink in podNode.Descendants("PODLink")
select new PODLink
{
LinkType = podLink.Element("LinkType").Value,
Location = podLink.Element("Location").Value,
Description = podLink.Element("Description").Value
}).ToList()
}).ToList();
我认为您的问题是内部查询不是List<PODLink>
,它可能是IEnumerable<PODLink>
或IQueryable<PODLink>
的类型,您无法将其转换为List<PODLink>
。但是你可以执行ToList()
方法,它应该可以解决你的问题。
更新:使代码看起来更漂亮并删除所有演员表。 更新:修复了示例中的两个错误,因为我没有编译它可能会有更多错误。
答案 1 :(得分:0)
更改为使用XMLReader。多一点代码,但它工作正常。