XMLに従っています。要素ノードとテキストが含まれています。ノードごとに次のクラスのオブジェクトを作成する必要がありelement
ます(のみ)。要素の名前とその値をオブジェクトに格納する必要があります。どうやってやるの?
public class MyElement
{
public string ElementName { get; set; }
public string ElementValue { get; set; }
}
コード
static void Main(string[] args)
{
XDocument pDoc = XDocument.Parse(@"<main>
Direct 1
<sub1>A</sub1>
Direct 2
<sub2>B</sub2>
<sub3>C</sub3>
00
</main>");
IEnumerable<XNode> nodes = from c in pDoc.Elements().Nodes()
select c;
IEnumerable<MyElement> entityCollection = nodes.Select(v => new MyElement()
{
ElementName = v.ToString()
}).ToList();
}
必要な結果は次のようになります
List<MyElement> sampleRequiredList = new List<MyElement>();
sampleRequiredList.Add(new MyElement() { ElementName = "sub1", ElementValue = "A" });
sampleRequiredList.Add(new MyElement() { ElementName = "sub2", ElementValue = "B" });
sampleRequiredList.Add(new MyElement() { ElementName = "sub3", ElementValue = "C" });
アップデート
以下は、選択した回答に基づく解決策です。
var elementsUsingRoot = pDoc.Root.Elements();
var nodesUsingRoot = pDoc.Root.Nodes();
var secondCollection = pDoc.Root.Elements()
.Select(x => new MyElement
{
ElementName = x.Name.LocalName,
ElementValue = x.Value
});
//Text Nodes
IEnumerable<XText> textNodes = from c in pDoc.Root.Nodes()
where c.NodeType == XmlNodeType.Text
select (XText)c;
//Element Nodes
IEnumerable<XElement> elementNodes = from c in pDoc.Root.Nodes()
where c.NodeType == XmlNodeType.Element
select (XElement)c;
//Element Nodes 2
IEnumerable<XElement> elementNodes2 = from c in pDoc.Root.Elements()
select c;
参照