Linq To Xml Search XML, не зная точной структуры - PullRequest
0 голосов
/ 08 июля 2011

Как мне разобрать следующее, чтобы получить sql-сообщение .Net SqlClient Data Provider?

Я пытаюсь сделать это с Linq to 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 Ответ

1 голос
/ 09 июля 2011
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, вложенных в них.Для них выберите сообщение.Наконец, убедитесь, что результат только один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...