Helo!LINQ to XML : 노드 중 하나가 다른 노드의 형식을 나타내는 XML 파일 구문 분석
LINQ to XML을 사용하여 다른 노드에 표시되는 필드의 유형을 알려주는 한 노드의 문자열 값을 사용할 수 있습니까? -하지만 당신은 쉽게 쓸 수
Helo!LINQ to XML : 노드 중 하나가 다른 노드의 형식을 나타내는 XML 파일 구문 분석
LINQ to XML을 사용하여 다른 노드에 표시되는 필드의 유형을 알려주는 한 노드의 문자열 값을 사용할 수 있습니까? -하지만 당신은 쉽게 쓸 수
글쎄, 당신은 유형 정보 만 실행 시간에 알려져 주어진 멋진 정적으로 입력 된 API를받지 않습니다 사전에
<node>
<name>nodeName</name>
<type>string</type>
</node>
<node>
<name>0</name>
<type>bool</type>
</node>
<node>
<name>42</name>
<type>int</type>
</node>
감사합니다 : 예를 들어
적절한 하위 요소를 찾고 System.Object
을 반환하는 XElement의 확장 메서드입니다. (테스트되지 않은) 예를 들어 :
public static object ParseValue(this XElement element)
{
XElement name = element.Element("name");
XElement type = element.Element("type");
// Insert error handling here :)
switch (type.Value)
{
case "int":
return int.Parse(name.Value);
case "string":
return name.Value;
case "bool":
return name.Value == "1"; // Or whatever
default:
throw new ArgumentException("Unknown element type " + type.Value);
}
}
그것은 내가 데이터 형식을 설계하는 것 방법은 아니지만, 그것은 당신에 추력 되 않다면 ...
public static void Main() {
var xmlNodes = new XElement("Nodes",
new XElement("Node",
new XElement("Name", "nodeName"),
new XElement("Type", "string")
),
new XElement("Node",
new XElement("Name", "True"),
new XElement("Type", "bool")
),
new XElement("Node",
new XElement("Name", "42"),
new XElement("Type", "int")
)
);
var converters = new Dictionary<string,Func<string,object> > {
{ "string", val => val },
{ "bool", val => Boolean.Parse(val) },
{ "int", val => Int32.Parse(val) }
};
var values =
from node in xmlNodes.Elements("Node")
select converters[ node.Element("Type").Value ](node.Element("Name").Value);
foreach(var value in values)
Console.WriteLine(value.GetType().ToString() + ": " + value);
}