2016-09-19 4 views
0

HTML 문서에 HTML을로드했습니다. 이제 각각의 dtdd (dt에 속함)에 액세스하고 선택하고 나중에 사용하기 위해 배열에 저장하려고합니다. 나는 이미 http://www.w3schools.com/xsl/xpath_axes.asp에 언급 된 XPath 구문을 시도했지만, 전혀 작동하지 않았습니다. 방금 NullReferenceException을 받았습니다. 하지만 내가 뭘 잘못 했니?민첩성 패키지로 HTML 문서에서 현재 노드 및 하위 노드에 액세스하는 방법은 무엇입니까?

하나의 **dt**에는 2 개 이상의 **dd** 요소가있는 경우가 있습니다. 해당 **dt**에 모든 **dd** 요소를 추가하고 싶습니다.

미리 감사드립니다. 나는 개인적으로 당신에게 XPath를 사용하여 솔루션을 제공 할 수있는 방법을 찾지 못한 이유

<dl> 
    <dt id="one">one</dt> 
    <dd>some text</dd> 
    <dt id="two">two</dt> 
    <dd>some text</dd> 
    <dt id="three">three</dt> 
    <dd>some text</dd> 
    <dd>some text</dd> 
    <dt id="four">four</dt> 
    <dd>some text</dd> 
    and so on... 
</dl> 

답변

0

dtdd 요소 사이에 직접적인 연결이 없다, 즉이다. XSLT가 옵션 일 수도 있지만, XSLT를 사용하는 빠르고 쉬운 방법을 찾지 못했습니다. 당신이 C# .NET을 사용하기 때문에 나는이 C#으로 볼 수있는 방법의 빠른 프로토 타입 함수를 만든 :

public static void Main(string[] args) 
     {    
      Dictionary<string, List<string>> dt = new Dictionary<string, List<string>>();   

      using(XmlReader reader = XmlReader.Create(@"data.xml")){ 
       bool incomingDd = false; 
       while(reader.Read()){ 
        switch(reader.NodeType){ 
         case XmlNodeType.Element:        
          if(String.Equals(reader.Name, "dt", StringComparison.OrdinalIgnoreCase)){ 
           dt.Add(reader.GetAttribute("id"), new List<string>()); 
          } 
          else if(String.Equals(reader.Name, "dd", StringComparison.OrdinalIgnoreCase)){ 
           incomingDd = true;         
          } 
          break; 

         case XmlNodeType.Text:         
          if(incomingDd && !String.IsNullOrEmpty(reader.Value)){         
           dt.Values.ElementAt(dt.Count -1).Add(reader.Value); 
           incomingDd = false; 
          } 
          break; 
        } 
       } 
      } 

      foreach(var item in dt){ 
       Console.WriteLine($"{item.Key} {item.Value.Count()}:"); 
       foreach(var dd in item.Value){ 
        System.Console.WriteLine($"\t{dd}"); 
       } 
      } 
     } 

이 사용자의 요구에 맞게 예쁜 코드되지 않을 수도 있습니다, 그러나 이것은 당신에게 해결하는 방법에 대한 아이디어를 줄 것이다 너의 문제.

+0

안녕하세요. 내 늦은 응답에 대해 깊은 사과드립니다. 지난 주에 바빴습니다. 당신의 대답에 대해 많은 감사드립니다. 그것은 나를 많이 도왔다! –

+0

문제 없습니다. 도와 드리겠습니다! 그것이 당신의 문제에 대한 해결책이라면 대답으로 표시 할 수 있습니까? 고맙습니다. – codeguy