2011-02-15 4 views
1

데이터베이스에서 가져온 일부 데이터를 기반으로 XML을 작성 중이므로 LINQ2XML을 사용하여 XML을 작성하려고합니다. 데이터가 다른 곳에서 왔기 때문에 DataTable 객체에 채워진 내용을 기반으로 섹션별로 XML을 작성했습니다.조건부 XElement 내용, XElement 또는 XAttribute

XElements 및 XAttributes를 사용하여 하나 또는 둘 다를 얻을 수 있지만 XML을 빌드 할 시점에서 XElement 또는 XAttribute를 사용할 것인지 여부를 결정하는 방법에 대한 통찰력이 있는지 궁금합니다. 내가 자식 노드 곳을 구축하기 위해 XML 구축 과정 전반에 걸쳐 사용하고 내용의 예 여기

... 
New XElement("ParentNode",  
     New XElement("ChildNode",New XAttribute(XNamespace.Xmlns + "nil", "true")) 
) 
... 

것 : 여기

하드 코딩 XAttribute (VB.NET)과 XML 건물 코드에서 섹션의 필요 :

... 
New XElement("ParentNode", 
    From db as DataRow in dtTable.Rows _ 
    Order By db("Field") _ 
    Select New XElement("ChildNode", 
      New XElement("ChildID",db("ValueToParse")) 
    ) 
) 
... 

그래서 그것이 내가 ValueToParse, 예를 들어, 유효한 값을 (비어)이 있는지 확인하기 위해 필요로하는 LINQ 쿼리입니다. 만약 그렇다면 노드를 추가하면됩니다. 그렇지 않다면 명명 된 노드를 추가해야하지만 'xsi : nil = "true"'속성을 사용합니다.

주의 사항은 다른 부모를 통해 반복되는 일부 자손이 있다는 것입니다 (예 : AddressDetail 요소를 포함하는 AddressDetails 섹션이 AddressDetail 요소는 Contact 요소의 0 또는 1 개의 연락처 그룹을 포함 할 수 있으므로 노드를 Contacts 노드에 추가하는 것은 하나의 Contacts 요소 만있는 것처럼 간단한 옵션이 아닙니다.

나는 보통 LINQ를 사용하지 않는,하지만 = 내 기본에 대한

답변

3

죄송합니다 시간 XD에 좋은 생각처럼

감사합니다, 크리스 듯)하지만 난 당신이 주요 아이디어를 얻을 바랍니다 .

New XElement("ParentNode", 
    From db as DataRow in dtTable.Rows _ 
    Order By db("Field") _ 
    Select New XElement("ChildNode", 
      db("ValueToParse") != null ? (object)new XElement("ChildID", db("ValueToParse")) : 
             (object)new XAttribute("xsi:nil", "true")) 

    ) 
) 
관련 문제