2016-09-19 6 views
0

HTMLドキュメントにHTMLをロードしました。今度はdtdddtに属しており、後で使用するためにそれをアレイに格納してアクセス/選択したいと考えています。私はすでにhttp://www.w3schools.com/xsl/xpath_axes.aspに記載されているXPath構文を試しましたが、まったく機能しませんでした。私はちょうどNullReferenceExceptionを受け取った。しかし、私は何が間違っていますか?敏捷性パッケージを使用してHTML文書から現在のノードと子孫にアクセスする方法は?

**dt**の場合、**dd**の要素が2つ以上あることがあります。私はすべて**dd**要素を対応する**dt**に追加したいと思います。

事前に感謝します。

<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要素との間に直接のリンクは、私が個人的にあなたにXPathを使用してソリューションを提供する方法を見つけることができませんでした理由です、ありません。 XSLTはオプションかもしれませんが、私はXSLTを使って素早く簡単に見つけられませんでした。 もしC#を使用しているので、私は、これは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

関連する問題