나는 linq 솔루션을 찾기 위해 그물을 검색했습니다. 그러나 나는 꽤 복잡한 솔루션을 찾을 수 없습니다.linq의 레코드로 xml을 선택하십시오
아래 xml에서 comformation 요소를 어떻게 선택할 수 있습니까? 나는 각 구성 요소 (id, accountnumber, type)를 C#에서 linq를 사용하여 객체에 추가하려고한다.
사실 한 번에 하나의 묶음/레코드로 데이터를 가져 와서 목록에 추가하고 싶습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
XML
string batch = @"
<batchresult>
<outputs>
<output>
<value>
<conformation>
<component>
<name>cmdinfo</name>
<value>
<bundle>
<data>
<value>
<state>100</state>
</value>
</data>
</bundle>
</value>
</component>
<component>
<name>resultlist</name>
<value>
<bundle>
<data>
<value>
<conformation>
<component>
<name>id</name>
<value>
<state>1</state>
</value>
</component>
<component>
<name>accountnumber</name>
<value>
<string>10505749</string>
</value>
</component>
<component>
<name>type</name>
<value>
<string>subnumber</string>
</value>
</component>
</conformation>
</value>
<value>
<conformation>
<component>
<name>id</name>
<value>
<state>2</state>
</value>
</component>
<component>
<name>accountnumber</name>
<value>
<string>53871265</string>
</value>
</component>
<component>
<name>type</name>
<value>
<string>subnumber</string>
</value>
</component>
</conformation>
</value>
</data>
</bundle>
</value>
</component>
<component>
<name>batchnumber</name>
<value>
<bundle>
<data>
<value>
<state>14512367</state>
</value>
</data>
</bundle>
</value>
</component>
</conformation>
</value>
</output>
</outputs>
</batchresult>";
CODE
class record
{
string F1 = "";
public string f1
{
set { F1 = value; }
get { return F1; }
}
string F2 = "";
public string f2
{
set { F2 = value; }
get { return F2; }
}
string F3 = "";
public string f3
{
set { F3 = value; }
get { return F3; }
}
}
private void button1_Click(object sender, EventArgs e)
{
XDocument xmldoc = XDocument.Parse(batch);
var obj = from o in xmldoc.Descendants("component")
where o.Parent.Name == "conformation"
//select new record { f1 = o.Element("name").Value, f2 = o.Element("value").Value, f3 = o.Element("value").Value };
select new record { f1 = o.Element("id").Value, f2 = o.Element("accountnumber").Value, f3 = o.Element("type").Value };
foreach (var d in obj)
{
record myobj = new record();
myobj.f1=d.f1;//the first object will contain 1
myobj.f2=d.f2; //10505749
myobj.f3=d.f3;//subnumber .. and so on
mylist.Add(myobj);
}
}
안녕하세요, 역 직렬화를 시도하지 않은, 내가 그것을 확인합니다. 이 코드 둘 중 하나에서 게시 된 예 :에 대한 정의를 포함하지 않는
오류 15 'System.Xml.Linq.XElement'
XElement doc = XElement.Parse(batch);
doc.Descendants("conformation").Elements("component").Select(x =>
new record
{
f1 = x.First().Element("name").Value,
f2 = x.Skip(1).First().Element("name").Value,
f3 = x.Skip(2).Element("name").Value
};
는 나에게 다음과 같은 오류를 제공 ..is 'First'및 'System.Xml.Linq.XElement'형식의 첫 번째 인수를 받아들이는 확장 메서드가 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?)
어떻게 생깁니 까?
당신은 무엇을 어떻게해야합니까? 전체 파일이 아닌 XML 형식 만 게시 할 수 있습니까? – elyashiv
오브젝트를 생성하는 LINQ 대신 왜 XML에 객체를 deserialize하지 않습니까? – LukeHennerley
xml이'correct'가 아닙니다 ... – Anirudha