LINQ to XML을 사용하여 중첩 네임 스페이스가있는 XML 문서에서 값을 추출하고 싶습니다.LINQ to XML - 중첩 네임 스페이스 내의 값을 개체로 추출
는 내 질문은 부분적으로 다른 SO 사용자가 대답했다 : 나는 아직도 객체의 속성에 값을 선택하는 방법을 알아 내려고 노력하는 데 문제가 있어요 LINQ to XML w/ nested namespaces
. 위의 링크의
내용 :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:Envelope xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns3="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-4">
<ns1:Header>
<ns3:TransactionID ns1:mustUnderstand="1">XXXX-XXXX-XXXX-XXXX</ns3:TransactionID>
</ns1:Header>
<ns1:Body>
<ns3:DeliverReq>
<ns3:MM7Version>6.8.0</ns3:MM7Version>
<ns3:LinkedID>LINKED-ID-IS-HERE</ns3:LinkedID>
<ns3:Sender>
<ns3:Number>3025551212</ns3:Number>
</ns3:Sender>
<ns3:Recipients>
<ns3:To>
<ns3:Number displayOnly="false">11111</ns3:Number>
</ns3:To>
</ns3:Recipients>
<ns3:TimeStamp>2011-04-25T10:28:40.000Z</ns3:TimeStamp>
<ns3:UACapabilities UAProf="motok1c"/>
<ns3:Content allowAdaptations="true" href="cid:default.cid"/>
</ns3:DeliverReq>
</ns1:Body>
</ns1:Envelope>
개체가이 XML에서 작성되는 :
public class TestClass
{
public string TransactionId { get; set; }
public string MessageType { get; set; }
public string Mm7Version { get; set; }
public string VaspId { get; set; }
public string VasId { get; set; }
public string Sender { get; set; }
public string Recipients { get; set; }
public string LinkedId { get; set; }
public string TimeStamp { get; set; }
public string Priority { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public string UaCapabilities { get; set; }
// not all properties appear in every XML message received
}
너무 여기
은이 문제에 대한 자원이다 예를 들어 네임 스페이스 (XNamespa ce),하지만 LINQ 문을 사용하여 개체를 채울 때 짧은 빠지게 오전. LINQ의 모양이 위의 게시와 같은 XML이있을 때 객체의 속성에 값을 선택 할 수 있도록 무엇// (don't know the "from" in this case - decendants?
// which XML key/node?)
select new TestClass
{
TransactionId = [LINQ to select the "TransactionID" value that
appears under the Header key]
Mm7Version = [LINQ to select the "MM7Version" value, under the
DeliverReq key]
.....
}
:
는 내가 뭔가를 할 필요가 있다고 생각? 헤더의 TransactionID 값과 DeliverReq 값 아래에있는 값은 XML의 두 부분으로 나누어 져 있습니다. 그것들이 퍼져 있다는 것은 이상한 일이며, 단순히 DeliverReq 키로 값을 선택하는 것보다 혼란 스럽습니다. FROM 부분을보고 XML의 값으로 채워진 속성 중 2 ~ 3 개가 있으면 거기에서 가져올 수 있습니다.
설명이 필요하면 알려주십시오. 내 주요 문제는 LINQ의 "FROM"부분과 TransactionId가 DeliverReq 태그 외부에 있다는 사실을 처리하는 방법입니다. Sender와 Recipients 태그 아래에 값을 중첩하는 것과 같은 다른 경우를 처리 할 수 있다고 생각합니다.
가 감사를 , BG. 그게 제가 찾고 있던 것입니다 - 당신이 말했듯이, 나는 List <> 객체를 채우는 것이 아니라 오히려 단 하나의 것을 채우고 있습니다. 당신의 대답에 대한 핵심은 두 가지입니다 : LINQ 문을 "보낸 사람"으로 사용하지 않고 "단일"확장 프로그램을 사용하지 않았습니다. 정말 고맙습니다. 나는 많은 것을 배웠다! –
또한이 필드 중 일부는 선택 사항이므로 "Single"대신 "SingleOrDefault"를 사용하는 것처럼 보입니다. –
@ D-Sect yes - 옵션 일 경우'SingleOrDefault()'를 사용하십시오. – BrokenGlass