XML형식의 string을 XDocument.Parse(string) 해서 XDocument로 만든후에

그 XML에서 특정 element만 가져오고 싶으면
(from node in XDocument.Descendants("elementName") select node)

이렇게 하면 여러개의 XElement가 나올것이고

이걸 만약 List<XElement> 형식으로 바꾸고 싶으면
(from node in XDocument.Descendants("elementName") select node).ToList<XElement>();
하면 됩니다.

만약 이걸 특정 attribute를 가지고 Dictionary형태로 만들고 싶으면
Dictionary<string,string> 인데 attribute중 class가 key고 name이 value라면
(from node in XDocument.Descendants("elementName") select node).ToDictionary( t => t.Attribute("class").value, t => t.Attribute("name").value);


요로케..

음.. 이게 LINQ인가... ;;;


by 피요히코~ 2010. 12. 9. 09:47

데이터를 주고 받을때. 특히 네트워크 상에서는 XML을 많이 사용하죠..

받아온 XML을 입맛에 맛게 사용하기 위해서는
(입맛에 맛게라기 보단 먹을수 있게......쪽이 더 맞으려나..)

XML을 역직렬화 하는 과정이 필요합니다.

그럴때 XML을 클래스에 맵핑(? 이라고 해야 하나요? 다른말을 써야하나? ㅋ)하기 위해
클래스를

[XmlRoot(ElementName = "WVP")]
    public class MainTopicListModel
    {
        [XmlElement(ElementName = "TopicList")]
        public TopicListModel Topic { get; set; }

뭐 이런식으로 XmlAttribute 를 써서 클래스를 만드는데...
사실 헷깔리지 않게 잘만 만들면
간단하게 알아서 잘 역직렬화가 되는데

혹시라도

가끔..

이상하게 데이터가 잘 넘어오는데
이상하게
특정변수만 값이 계속 안넘어 온다면

Name을 잘 보는것도 괜찮습니다...

혹시나.. 뒤쪽에 공백이 없는지를 확인을... ㅠㅠ


뭐 이런실수. 아무도 안하겠지만
뒤쪽에 공백 하나 때문에
계속 값이 한개만 안넘어와서

혼자 2시간을 끙끙 거렸는데..
알고보니 공백....
 << 이놈의 공백.. ㅠㅠ

by 피요히코~ 2010. 9. 28. 20:41

XMLDocument 이용한 검색

 

string path = "booklist.xml";

XmlDocument doc = new XmlDocument();

doc.Load(path);

string xPath = "//book/title[../@kind='소설']";

// SelectNodes 메서드는 검색조건에 맞는 개체를 XmlNodeList 반환하고

// SelectSingleNode 메서드는 검색조건에 맞는 단한개의 XmlNode 만을 반환(ID속성일 경우 쓰임)

           

XmlNodeList nodeList = doc.SelectNodes(xPath);

for (int i = 0; i < nodeList.Count; i++)

{

string title = nodeList[i].InnerText;

Console.WriteLine(title);

}


 

XPathDocument 이용한 검색

 // [1]. XPathDocument 생성

XPathDocument xdoc = new XPathDocument("booklist.xml");

// [2]. XPathNavigator 생성 -> XML 데이터를 탐색하고 편집하기 위한 커서모델을 제공한다.

XPathNavigator xPathNavi= xdoc.CreateNavigator();

// [3]. XPathNodeIterator 생성 -> 반복기 역활

XPathNodeIterator xPathIterator = xPathNavi.Select("//booklist/book/title[../@kind='컴퓨터']");

// [4]. kind='컴퓨터' 없을 까지 돈다.

while (xPathIterator.MoveNext())

{

     XPathNavigator navigatorTitle = xPathIterator.Current;

     Console.WriteLine(navigatorTitle.Value);

}  



by 피요히코~ 2009. 2. 25. 13:15

XML 에서 속성 가져오는 방법..

            string path = "booklist.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            XmlElement booklist=doc.DocumentElement;
            XmlElement FirstBook = (XmlElement)booklist.FirstChild;

            // 1. XmlAttributeCollection 를 사용해서 속성 가져오기 
            XmlAttributeCollection attributes = FirstBook.Attributes;
            for (int i = 0; i < attributes.Count; i++)
            {
                XmlAttribute attribute = (XmlAttribute)attributes[i];
                Console.WriteLine(attribute.Name + ":" + attribute.Value);
            }

            // 2. GetAttributd() 메서드를 이용해서 속성 가져오기
            string id = FirstBook.GetAttribute("id");
            Console.WriteLine("id:"+id);
            string kind = FirstBook.GetAttribute("kind");
            Console.WriteLine("kind:"+kind);
        }



 

XML 에서 모든엘리먼트 가져오기
 
           string path = "booklist.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            XmlElement booklist = doc.DocumentElement;

          
            //// GetElementsByTagName() 으로 엘리먼트 가져오기
            XmlNodeList titleNodeList = doc.GetElementsByTagName("price");
            for (int i = 0; i < titleNodeList.Count; i++)
            {
                XmlNode titleNode = titleNodeList[i];
                XmlNodeList childNodeList = titleNode.ChildNodes;
                XmlNode textNode = childNodeList[0];
                string value = textNode.Value;
                Console.WriteLine(value);
            }



by 피요히코~ 2009. 2. 25. 13:14
string filePath = "booklist.xml";

XmlDocument doc = new XmlDocument();

doc.Load(filePath);

// 잘짜인 xml 이면은 반드시 한개의 엘리먼트가 있기때문에 XmlDocument 개체의 속성인 DocumentElement 바로 얻을 있다.

 

XmlElement booklist = doc.DocumentElement; 

 

// 첫번쨰 자식엘리먼트의 노드들의 수를 가져온다.

XmlNodeList childs = FirstBook.ChildNodes;

 

// 첫번쨰 자식엘리먼트의 카운트수 만큼 노드의 이름 내용을 보여준다.            

for (int i = 0; i < childs.Count; i++)

{

       XmlElement eChild = (XmlElement)childs[i];

      Console.WriteLine(eChild.Name + ":" + eChild.InnerText);

 }


by 피요히코~ 2009. 2. 25. 13:14
| 1 |