2011-08-15 7 views
0

나는 여전히 프로젝트를 진행 중이며 크게 즐기고있다. C#에서 XML 파싱하기

이 나는 ​​순간에 XML

를 사용하여 라이브 업데이트 피드를 구현할 수 있다면 나는 심지어 내가 노드 값 등을 구문 분석을위한 것입니다 발견 한 모든 튜토리얼로 XML의 특정 유형을 분석하는 방법을 잘 모릅니다보고 싶어

하지만 난 너희들이 나에게 놀라운 것 해당 노드에서의 내부 요소에 액세스하는 방법을 이해하는 데 도움 수 있다면이

<Object name="ObjectName" type="ObjectType" size="ObjectSize" image="ObjectImage" /> 

의 라인을 따라 뭔가를 생각하고 있었다 너무 많이하지 않은 경우 작은 전자에게 묻기 이해가 안되네. 내가 왜 그 Linq는만큼이 C#으로 한, 어쩌면 나에게 말한다면 마음을 해달라고, 난 그냥 캔트 상단에있는 예제를 구문 분석하는 것 XElement를

<Object> 
    <Name>ObjectName</Name> 
    <Type>ObjectType</Type> 
    <Size>ObjectSize</Size> 
    <Image>ObjectImage</Image> 
</Object> 

를 사용하여 다음과 같습니다 XML을 구문 분석하는 방법을 알고 다른 하나를 선택하겠습니까? 또한 파일이 변경되었는지 확인하는 방법에 대한 아이디어가 있으니 실시간 업데이트를 구현할 수 있습니까? 당신의 도움에 대한

감사

+0

.NET에서 xml (de) serializer의 문제점은 무엇입니까? http://support.microsoft.com/kb/815813을 참조하십시오. 이 xml 스키마에 바인딩되어 있습니까? 그렇다면이 의견을 잊어 버리십시오. – boj

답변

4

상단의 예는 대신 하위 요소의 속성 사용하지만 작업을 그냥 쉽게 :

XElement element = XElement.Parse(xml); 
string name = (string) element.Attribute("name"); 
string type = (string) element.Attribute("type"); 
string size = (string) element.Attribute("size"); 
string image = (string) element.Attribute("image"); 

I 대체로 null 참조에서 변환을 수행하는 것처럼 Value property 대신 explicit string conversion을 사용하는 것이 좋습니다. 결국 NullReferenceException 대신 null 문자열 참조로 끝납니다. 물론 속성이 누락 된 프로그래밍 오류 인 경우 예외가 더 적절하며 Value 속성이 문제가 없습니다. (같은 논리로도 마찬가지로 XElement 값을 변환 할 수 있습니다.)

+0

그것은 내가 결코 고려하지 않은 'Value' 속성과 캐스트를 사용하는 것 사이에 유 용한 구분입니다. 메모 주셔서 감사. – mquander

+0

빠른 응답을 보내 주셔서 감사합니다. –

2

XEelment.FirstAttribute을 사용하여 요소의 첫 번째 특성을 가져오고 그 다음에 모두 XAttribute.NextAttribute을 사용하여 루프 할 수 있습니다. 이 속성이 있음을 알면 사용자에게 의존하지 않습니다.

XAttribute attribute = element.FirstAttribute; 
while (attribute != null) 
{ 
    // Do stuff 
    attribute = attribute.NextAttribute` 
} 
+0

원하는 것을 요청하는 대신 왜 루프합니까? –

+0

@ 존 - 당신이하고 싶은 일에 달려 있다고 생각합니다. 당신의 방법은 더 명백합니다. 또한 대안을 제공하십시오. – ChrisF

+0

빠른 응답을 보내 주셔서 감사합니다. –

3

문서를 나타내는 도메인 개체가있는 경우 (대개의 경우) XmlSerializer는 사용하기가 매우 쉽습니다.

[XmlRoot("Object") 
public class Item 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public string Size { get; set; } 
    public string Image { get; set; } 
} 

사용법 : 전체 문서가 어떤 종류의 도메인 개체를 나타내는 때 수동 구문 분석을 더 쉽게이 방법을 사용하여 찾을

XmlSerializer ser = new XmlSerializer(typeof(Item)); 
Item item = (Item)ser.Deserialize(someXmlStream); 

.

관련 문제