2011-03-19 3 views
2

C#에서 XML 파일에 액세스하는 방법? 해당 XML 파일의 노드 수를 계산하는 방법은 무엇입니까? XML 파일의 각 노드에 어떻게 액세스해야합니까?XML 파일에서 데이터를 가져 오거나 읽는 방법은 무엇입니까?

내가 두 개의 XML 파일, 그 중 하나가이 코드를 가지고있는 dev.xml 인이

<Devanagri_to_itrans> 
    <mapping> 
    <character>अ</character> 
    <itrans>a</itrans> 
    </mapping> 
    ... 
</Devanagri_to_itrans> 

두 번째 파일은 (매우 유사한 구조를 가진) guj.xml

<Gujrathi_to_itrans> 
    <mapping> 
    <character>અ</character> 
    <itrans>a</itrans> 
    <mapping> 
    ... 
</Gujrathi_to_itrans> 

I입니다 이를 문자 매핑의 2 차원 배열로 변환해야합니다.

답변

0

내가 지금 더 나은 해답을 제공 할 수는. 여기는 기능적인 XML 파싱 및 조인 콘솔 앱으로, 당신이 찾고있는 것을 보여줍니다 (제 생각 엔). xml 문자열 대신 xml 파일을 구문 분석하려면 표시된 Parse 메서드 대신 XDocument Load 메서드를 사용합니다. 행운을 빌어 요는, 세션 변수에 대한

  XDocument docA = XDocument.Parse(
@"<Devanagri_to_itrans> 
    <mapping> 
    <character>अ</character> 
    <itrans>a</itrans> 
    </mapping> 
</Devanagri_to_itrans>"); 
      XDocument docB = XDocument.Parse(
@"<Gujrathi_to_itrans> 
    <mapping> 
    <character>અ</character> 
    <itrans>a</itrans> 
    </mapping> 
</Gujrathi_to_itrans>"); 
      var devanagriKeys = (from d in docA.Descendants("mapping") 
                select new { 
                 Key = d.Descendants("itrans").FirstOrDefault().Value, 
                 Character = d.Descendants("character").FirstOrDefault().Value 
                }).ToArray(); 
      var gujrathiKeys = (from g in docB.Descendants("mapping") 
                select new { 
                 Key = g.Descendants("itrans").FirstOrDefault().Value, 
                 Character = g.Descendants("character").FirstOrDefault().Value 
                }).ToArray(); 
      var crossReference = (from d in devanagriKeys 
            join g in gujrathiKeys on d.Key equals g.Key 
            select new { 
             d.Key, 
             Devanagri = d.Character, 
             Gujrathi = g.Character 
            }).ToList(); 
      Console.WriteLine("Enter a key character to translate:"); 
      string searchKey = Console.ReadLine(); 
      var translation = crossReference.Where(cr => cr.Key == searchKey).FirstOrDefault(); 
      if (translation == null) 
       Console.WriteLine("No such key in the cross reference."); 
      else 
       Console.WriteLine("{0} is {1} in Devanagri and {2} in Gujrathi", 
        translation.Key, translation.Devanagri, translation.Gujrathi); 
      Console.ReadKey(true); 

PER 요청은 :

익명 유형은 메소드 내에서 사용하기위한 것입니다. 다른 곳에서 사용하기 위해 목록을 Session 변수에 배치하려면 원하는 3 가지 속성을 포함하는 실제 클래스를 만들고 위의 코드 행을 아래에 매우 일치하도록 변경하십시오. (I 선택한 클래스 이름은 CrossReferenceTranslation이었다.)

 Session["CrossReference"] = (from d in devanagriKeys 
           join g in gujrathiKeys on d.Key equals g.Key 
           select new CrossReferenceTranslation() { 
            d.Key, 
            Devanagri = d.Character, 
            Gujrathi = g.Character 
           }).ToList(); 

... 다음, 당신이 변수로 세션 객체의 목록을 얻으려면이 작업을 수행 할 수있는 시간에 다른 시점에서. 변수가 세션이 시간 초과 될 때마다 어떤 일이 일어날 것, 널 (null)이 될 수 있다는 가정 ... 내가 수를 표시 할 해달라고

List<CrossReferenceTranslation>() crossReference = Session["CrossReference"] ?? 
    new List<CrossReferenceTranslation>(); 
+0

감사합니다 fr을 코드 ... 친절하게 도와주세요 1 가지 더 plzz ...이 세션 변수에 목록에 저장하는 방법 ??? 그래서 내가 나중에 쉽게 액세스 할 수있는 파일을 ASP에서 파일 ... TEMP가 배열이라고 가정합니다. 배열을 세션에 넣으려면 : Session [ "array"] = TEMP; 그리고 다른 페이지에서 배열 검색하기 : ArrayList temp = (System.Collections.ArrayList) Session [ "array"]; – vin

+0

먼저 ArrayList가 아닌 List 을 사용하십시오. ArrayList는 권투 때문에 .net 2.0부터 열등했습니다. 번역기를 세션 변수에 배치하는 코드를 추가했지만 Session []보다 더 영구적이고 확장 가능한 솔루션을 고려해야합니다. – Tahbaza

1

을 제공합니다 System.Xml.Linq. 다음은 콘솔 응용 프로그램의 창에 지정된 XML 파일에있는 요소의 간단한 계산 : 당신이 세부 사항을 더 추가 한 이후

string xml = @"<xml><a/><a/><a/></xml>"; 
XDocument doc = XDocument.Parse(xml); 
Console.WriteLine((from a in doc.Descendants("a") 
        select a).Count()); 
+0

을 참고, 내가 얼마나 변수에 저장하여 추가로 사용하려면 내가해야만 했어? 감사!! – vin

+0

'Console.WriteLine'을'var c = '로 바꿉니다 –

+0

내 xml 파일은 Visual Studio 자체에 있지만 전체 코드를 문자열 xml에 저장하고 싶습니다. 노드 만 읽고 저장하고 싶습니다 !! 덕분에 – vin

관련 문제