2011-07-08 1 views
0

SQLメッセージ.Net SqlClient Data Providerを取得するには、次のように解析しますか?Linq To Xml正確な構造を知らずにXMLを検索する

私はLinqでxmlを実行しようとしていますが、私は大したことはありません。 xmlは再帰的なので、どのレベルのメッセージが表示されるのかわからない

アイデアはありますか?

おかげ

<detail> 
    <ErrorCode xmlns="http://www.microsoft.com/sql/reportingservices">rsProcessingAborted</ErrorCode> 
    <HttpStatus xmlns="http://www.microsoft.com/sql/reportingservices">400</HttpStatus> 
    <Message xmlns="http://www.microsoft.com/sql/reportingservices">An error has occurred during report processing.</Message> 
    <HelpLink xmlns="http://www.microsoft.com/sql/reportingservices">http://go.microsoft.com/fwlink/?LinkId=20476&amp;EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&amp;EvtID=rsProcessingAborted&amp;ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&amp;ProdVer=10.50.1600.1</HelpLink> 
    <ProductName xmlns="http://www.microsoft.com/sql/reportingservices">Microsoft SQL Server Reporting Services</ProductName> 
    <ProductVersion xmlns="http://www.microsoft.com/sql/reportingservices">10.50.1600.1</ProductVersion> 
    <ProductLocaleId xmlns="http://www.microsoft.com/sql/reportingservices">1033</ProductLocaleId> 
    <OperatingSystem xmlns="http://www.microsoft.com/sql/reportingservices">OsIndependent</OperatingSystem> 
    <CountryLocaleId xmlns="http://www.microsoft.com/sql/reportingservices">1033</CountryLocaleId> 
    <MoreInformation xmlns="http://www.microsoft.com/sql/reportingservices"> 

     <Source>Microsoft.ReportingServices.ProcessingCore</Source> 
     <Message msrs:ErrorCode="rsProcessingAborted" msrs:HelpLink="http://go.microsoft.com/fwlink/?LinkId=20476&amp;EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&amp;EvtID=rsProcessingAborted&amp;ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&amp;ProdVer=10.50.1600.1" xmlns:msrs="http://www.microsoft.com/sql/reportingservices">An error has occurred during report processing.</Message> 
     <MoreInformation> 
      <Source>Microsoft.ReportingServices.ProcessingCore</Source> 
      <Message msrs:ErrorCode="rsErrorReadingNextDataRow" msrs:HelpLink="http://go.microsoft.com/fwlink/?LinkId=20476&amp;EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&amp;EvtID=rsErrorReadingNextDataRow&amp;ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&amp;ProdVer=10.50.1600.1" xmlns:msrs="http://www.microsoft.com/sql/reportingservices">Cannot read the next data row for the dataset DD_Inventory.</Message> 
      <MoreInformation> 
       <Source>.Net SqlClient Data Provider</Source> 
       <Message>Conversion failed when converting the nvarchar value 'h' to data type int.</Message> 
      </MoreInformation> 
     </MoreInformation> 
    </MoreInformation> 
    <Warnings xmlns="http://www.microsoft.com/sql/reportingservices" /> 
</detail> 

答えて

1
var doc = XDocument.Parse(xml); 

XNamespace ns = "http://www.microsoft.com/sql/reportingservices"; 

string message = (from info in doc.Descendants(ns + "MoreInformation") 
        where info.Element(ns + "MoreInformation") == null 
        select (string)info.Element(ns + "Message")).Single(); 

は名前MoreInformationで文書全体のすべての要素を取り、唯一MoreInformation、それ以上は、それらの中にネストしていないものを取ります。それらについては、メッセージを選択します。最後に、結果が1つだけであることを確認します。

+0

あなたは絶対的な男です!ありがとうございました! :) – Mantisimo