开发者

Linq To Xml Search XML without knowing the exact structure

How would I parse the following to get the sql message .Net SqlClient Data Provider?

I'm trying to do it with Linq to xml but I'm not having much luck. The xml is recursive so I cant be certain what level the message will appear at

Any ideas?

Thanks

<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%开发者_Go百科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>


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();

Take all elements in the whole document with the name MoreInformation, take only those that don't have any more MoreInformation nested inside them. For them, select the message. Finally, make sure there is only one result.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜