2009-03-22 6 views
0

을 사용하여 조건부로 선택한 요소에서 XML 내용을 바꾸는 방법 웹 기반 장고 응용 프로그램에서 모든 데이터를 가져 오는 .NET 응용 프로그램 (VB 2008)을 작업하고 있습니다.linq (VB 2008)

저는 Linq-to-XML과 Linq-to-objects를 사용하고 있습니다.

하나의 API 호출은 XDocument에로드하는 다음 형식의 XML 데이터를 제공합니다.

<django-objects version="1.0"> 
    <object pk="1" model="app.person"> 
     <field type="CharField" name="reference_num">001</field> 
     <field to="app.office" name="office" rel="ManyToOneRel">2</field> 
     <field type="DateField" name="date">2008-09-03</field> 
     <field type="CharField" name="surname"></field> 
     <field type="CharField" name="name">Sandra</field> 
     <field type="DateField" name="birthdate">1988-11-03</field> 
     <field type="CharField" name="sex">F</field> 
     <field type="CharField" name="marital_status">S</field> 
     <field type="TextField" name="special_interests">Biking</field> 
     <field type="CharField" name="identity_proof"></field> 
     <field type="CharField" name="identity_proof_number"></field> 
     <field type="BooleanField" name="is_active">0</field> 
     <field type="DateTimeField" name="created">2008-09-03 12:46:39</field> 
     <field type="DateTimeField" name="modified">2008-09-03 12:46:39</field> 
     <field type="DateField" name="important_date"><None></None></field> 
     <field type="DateField" name="archive_date"><None></None></field> 
     <field type="CharField" name="process_status"></field> 
     <field type="FileField" name="image"></field> 
     <field to="auth.user" name="self_user" rel="OneToOneRel">13</field> 
    </object> 
    <object pk="2" model="app.person"> 
    . 
    <!-- more similar xml //--> 
    . 
    </object> 
    . 
    . 
    . 
</django-objects> 

는 형식의 API 호출이 같은 여러 <object> 요소를 반환합니다. 이 XML에는 Null 값을 나타내는 <None></None>이 포함되어 있습니다 (예 : 위 코드 블록의 아래쪽 방향, <field type="DateField" name="archive_date"><None></None></field>). <None></None>은 데이터베이스에서이 필드에 null 값이 있음을 알립니다. 이 XDocument의 기타 <object> 요소의 날짜가 <None></None> 일 수 있습니다. 내가 뭘하고 싶은 : 모든 <object>에 대한 은 <None></None>을 포함 1899-01-01이 null 표현을 바꿉니다.

어떻게해야합니까?

감사합니다.

답변

1

어때?

XElement djangoElement = XElement.Load(@"c:\django.xml"); 

IEnumerable<XElement> archiveDateElements = from fieldElement in djangoElement.Elements("object").Elements("field") 
              where fieldElement.Attribute("type") != null && 
               fieldElement.Attribute("type").Value == "DateField" && 
               fieldElement.Attribute("name") != null && 
               fieldElement.Attribute("name").Value == "archive_date" 
             select fieldElement; 

foreach (var archiveDateElement in archiveDateElements) 
{ 
    XElement noneElement = archiveDateElement.Element("None"); 

    if (noneElement != null) 
    { 
     noneElement.ReplaceWith("1899-01-01"); 
    } 
} 

P. 죄송합니다 - 방금 VB.NET을 발견했습니다. 그러나 나는 유사점이 올바른 방향으로 당신을 가리킬 수 있다고 생각합니다.

+0

나를 올바른 방향으로 설정하십시오. ''에 "name"속성이 있기 때문에 결국 더 간단한 where 절을 사용했습니다. 감사. From fieldElement doc.Descendants ("object"). 요소 ("field") fieldElement.Attribute ("name") .Value = "archive_date"fieldElement를 선택하십시오. – chefsmart

관련 문제