2016-04-04 18 views
1

行番号を与えることによって、C#でXDocumentのXElementを取得することは可能ですか?行番号でXDocumentからXElementを取得する方法

アイブ氏は次のように任意のテストXMLを得た:私はパラメータとして5 5のような任意の整数を与えたい

<Student> 
    <Name>Josphine</Name> 
</Student> 
<Student> 
    <Name>Hendrick</Name> 
</Student> 

は、Element <Name>Hendrick</Name> はどのような方法で可能これは私を与えるでしょうか?または、私はReaderでXDocument 全体を解析し、ループごとに行番号を確認する必要がありますか?

+1

あなたがすることによってフェッチしたいと思う理由行番号?要素が再配置された場合(XMLに対して完全に有効)、または空白が削除された場合(XMLに対しても有効)あなたの記載された要求は非常に悪いコード臭があります。代わりにXPathクエリを調べてください。 – willaien

+0

xsd-fileでxml-fileを検証します。このメソッドは、それぞれの行番号でerrormessageを返します。そして、なぜ私が行番号で要素を取得したいのですか。私はそのためにASP.NET MVC Programmを構築しました。そして、私は、ユーザーに正しい要素ではない内容を与えたいと思っています。 –

+0

XMLは区切り文字として新しい行を使用することはできません。したがって、1行にすべてが必要な場合は改行と同じになります – MikeT

答えて

2

あなたは文字列配列

string[] lines = File.ReadAllLines("path/to/file"); 

にファイルを読み、lines[4]のようなあなたのラインを得ることができます。

また、のXPathは、XML文書が変更される可能性があるため、よく見てください。

XPath Examples,Selecting Nodesこれらの例とチュートリアルをご覧ください。

+0

私のために非常にうまくいったおい...たくさんありがとう! –

1

あなたのXMLが整形式であり、あなたはあなたの仕事だけXLinqを使用して成し遂げるたい、そしてコードの下にあなたを助ける可能性がある場合、別のルック周りがあります:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Parse(@"<Students> 
                <Student> 
                <Name>Josphine</Name> 
                </Student> 
                <Student> 
                <Name>Hendrick</Name> 
                </Student> 
               </Students>", LoadOptions.SetLineInfo); 

      IEnumerable<XElement> descendants = doc.Descendants(); 

      foreach (XElement ele in descendants) 
      { 
       string ln_num = (((IXmlLineInfo)ele).HasLineInfo() ? ((IXmlLineInfo)ele).LineNumber.ToString() : ""); 
       string ln_pos = (((IXmlLineInfo)ele).HasLineInfo() ? ((IXmlLineInfo)ele).LinePosition.ToString() : ""); 
       Console.WriteLine(string.Format("{0} ({1}): at line no. {2}, position {3}", ele.Name.ToString(), ele.Value.ToString(), ln_num.ToString(), ln_pos.ToString())); 
      } 

      Console.ReadKey(); 
     } 
    } 
} 
関連する問題