2017-12-20 23 views
1

내 XML을 null로 설정하면 null 인변수 값은 내가 XML 값이

<example> 
     <ReferenceNumber xmlns="http://www.example.com/schemas/core/movement"> 
     <Mnemonic>LHH1</Mnemonic> 
     <MovementProjectNumber>4743</MovementProjectNumber> 
     <MovementVersion>5</MovementVersion> 
     </ReferenceNumber> 
</example> 

// 이동 ​​버전 값을 취득합니다 (5).

XDocument NewXML = XDocument.Parse(model.ReturnXML); // model.ReturnXML has XML as shown in above XML. 
XNamespace ns = "http://www.example.com/schemas/core/movement"; 

var MovementVersionNew = from MovVer in NewXML.Root.Element(ns + "ReferenceNumber").Elements(ns + "MovementVersion") 
          select MovVer.Value.ToList().FirstOrDefault().ToString(); 

// MovementVersion 요소의 값을 업데이트하기 위해 XML 노드 부분을 가져 오는 중입니다.

var MovementVersionRef = (from MovVer in NewXML.Root.Elements(ns + "ReferenceNumber") 
               select MovVer).ToList(); 

// MovementVersion 값을 null로 설정하십시오.

foreach (XElement element in MovementVersionRef.Descendants()) 
{ 
    if (!element.HasElements) 
    { 
     if (element.Name.ToString().Contains("MovementVersion")) 
     { 
      element.SetValue(""); 
     } 
    }  
}  

이 상기 코드 올바른지 (NewXML에서) 널로 MovementVersion 값을 설정하지만, 그것은 또한 MovementVersionNew 변수의 값을 변경하는 동시에 (I 널 5에서 이러한 변화를 원하지 않는다).

나중에 코드에서 값을 원하기 때문에 이전 값을 변경하지 않고 변경하거나 사용할 수있는 항목은 무엇입니까? 도와주세요. 미리 감사드립니다.

+1

줄 설정 MovementVersionNew를 다시 평가해야합니다. 거기에 중단 점을 놓고 무엇이 실행되는지를 알기 위해 스택 추적을보십시오 – LordWilmore

+0

감사합니다. @LordWilmore 나는 element.SetValue ("") 실행 후에 업데이트를 확인하고 발견했습니다. 그래서 이것을 위해 무엇을 할 수 있습니까? –

+0

'after'라고 말하면 그 뜻은 무엇입니까? SetValue ("")를 호출 한 결과를 의미합니까, 아니면 코드의 다른 부분을 의미합니까? – LordWilmore

답변

1

ToList()MovementVersionNew의 검색어로 전화하십시오.

static void Main(string[] args) 
{ 
    var xmlstr = 
     @"<example> 
      <ReferenceNumber xmlns='http://www.example.com/schemas/core/movement'> 
      <Mnemonic>LHH1</Mnemonic> 
      <MovementProjectNumber>4743</MovementProjectNumber> 
      <MovementVersion>5</MovementVersion> 
      </ReferenceNumber> 
     </example>"; 

    XNamespace ns = "http://www.example.com/schemas/core/movement"; 
    var xml = XDocument.Parse(xmlstr);  

    var MovementVersionNew = (from MovVer in xml.Root.Element(ns + "ReferenceNumber").Elements(ns + "MovementVersion") 
           select MovVer.Value.ToList().FirstOrDefault().ToString()).ToList(); 

    var MovementVersionRef = (from MovVer in xml.Root.Elements(ns + "ReferenceNumber") 
           select MovVer).ToList(); 

    foreach (XElement element in MovementVersionRef.Descendants()) 
    { 
     if (!element.HasElements) 
     { 
      if (element.Name.ToString().Contains("MovementVersion")) 
      { 
       element.Value = String.Empty; 
      } 
     } 
    } 

    MovementVersionNew.ForEach(Console.WriteLine); //Prints "5" 
    MovementVersionRef.ForEach(Console.WriteLine); 

} 
+0

고마워하지만이 작동하지 않습니다. –

+0

응답하기 전에이 코드를 테스트 한 결과 저에게 적합합니다. – JohnyL

+0

그 코드를 여기에 붙여 넣으면 확인할 수 있습니까? 왜냐하면 내 경우에는 MovVer.ToList()가 작동하지 않기 때문에 (오류 : 'System.Xml.Linq.XElement'에는 'ToList'에 대한 정의가없고 'System'의 첫 번째 인수 인 'ToList' .Xml.Linq.XElement '를 찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) 감사합니다. –