2011-02-08 3 views
2

에 XML에서 노드를 얻을 :내가 좋아하는 xml 파일이 C#을

<?xml version="1.0" encoding="utf-8"?> 
<Config> 
    <MetadataFormConfig FieldInternalName="Test"> 
     <Tabs> 
     <Tab Title="A to C" Order="1"> 
      <ShowParentTerm>A</ShowParentTerm> 
      <ShowParentTerm>B</ShowParentTerm> 
      <ShowParentTerm>C</ShowParentTerm> 
     </Tab> 
     <Tab Title="D to E" Order="2"> 
      <ShowParentTerm>D</ShowParentTerm> 
      <ShowParentTerm>E</ShowParentTerm> 
     </Tab> 
     </Tabs> 
    </MetadataFormConfig> 
</Config> 

내가 FieldInternalName 모든 노드를 싶어합니다.

어떻게 할 수 있습니까?

+2

출력으로 무엇을 기대합니까 ?? 'XmlNode' 객체의 목록? 문자열 목록 ?? 뭐?? –

+0

전체 탭 속성을 원합니다. 그리고 나서 값 A, B, C를 얻을 필요가 있습니다. 덕분에 –

답변

1

FieldInternalName으로 모든 노드를 가져 오는 Linq 버전.

// Loading from a file, you can also load from a stream 
     XDocument loaded = XDocument.Load(@"d:\test.xml"); 
     // Query the data 
     var query = from c in loaded.Descendants("MetadataFormConfig") 
       where (string)c.Attribute("FieldInternalName") == "Test" 
       select c; 
3

당신은 당신이 당신의 자신의 XPath 식을 테스트하고 원하는 결과를 얻을 때까지 수정할 수 있습니다 SelectNodes

+0

. 알았다. 하지만 탭 제목 속성을 가져 오는 방법을 알려주실 수 있습니까? 예 : A to C –

+0

@Suresh - 글쎄요, 이것은 Linq가 사용되기에 완벽한 후보입니다. Linq.xml에 대해 C#에서 약간 연구해야합니다 (v3.5 이상을 사용하기를 바랍니다). Linq를 사용하여,이 정보를 얻는 것은 케이크 조각이며, 불행히도 저는 문법에 대해 명확하지 않습니다. –

+0

@Suresh - 선택 노드를 사용하여 계속 원하는 값을 얻을 수는 있지만 많은 코드가 필요합니다. Linq를 사용하면 코드가 한 줄만 표시됩니다. :) –

0

SelectNodes("/Config/MetadataFormConfig[@FieldInternalName='Test']")

검사에게 세부 사항을 사용할 수 있습니다, XPATH 테스터의 많은 예를 들어 여기에 온라인이 있습니다 하나 : http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

위의 XML 조각을 붙여넣고 필요한 항목을 얻을 때까지 XPATH로 작업하십시오.

관련 문제