[c#] XDocument تحتوي على مساحات الأسماء


0 Answers

معالجة Anthony بتة مساحة الاسم - و XAttribute له تحويل صريح إلى GUID ، لذلك يجب أن يعمل هذا:

XNamespace eventNs = "http://schemas.microsoft.com/2004/06/E2ETraceEvent";
XNamespace systemNs = "http://schemas.microsoft.com/2004/06/windows/eventlog/system";

Guid guid = (Guid) document.Element(eventNs + "E2ETraceEvent")
                           .Element(systemNs + "System")
                           .Element(systemNs + "Correlation")
                           .Attribute("ActivityID");

لاحظ كيف لا يتم ورث مساحات الأسماء للسمات.

يمكن أن يؤدي استخدام عبارة واحدة كما فعلت هنا في بعض الأحيان إلى جعل الحياة أبسط ، ولكنه يجعل تصحيح الأخطاء أصعب حيث لا يمكنك رؤية القيم الوسيطة. تعديل حسب الذوق :)

Question

لدي XML التالي الذي أحاول الاستعلام عنه مع XDocument:

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
    <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
        <EventID>589828</EventID>
        <Type>3</Type>
        <SubType Name="Information">0</SubType>
        <Level>8</Level>
        <TimeCreated SystemTime="2010-06-01T09:45:15.8102117Z" />
        <Source Name="System.ServiceModel" />
        <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
        <Execution ProcessName="w3wp" ProcessID="5012" ThreadID="5" />
        <Channel />
        <Computer>TESTSERVER3A</Computer>
    </System>
    <ApplicationData>
        <TraceData>
            <DataItem>
                <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
                    <TraceIdentifier>http://msdn.microsoft.com/en-GB/library/System.ServiceModel.Activation.WebHostCompilation.aspx</TraceIdentifier>
                    <Description>Webhost compilation</Description>
                    <AppDomain>/LM/W3SVC/257188508/Root-1-129198591101343437</AppDomain>
                    <Source>System.ServiceModel.Activation.ServiceParser/39498779</Source>
                    <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/StringTraceRecord">
                        <VirtualPath>/Service.svc</VirtualPath>
                    </ExtendedData>
                </TraceRecord>
            </DataItem>
        </TraceData>
    </ApplicationData>
</E2ETraceEvent>

تنفيذ التعليمات البرمجية التالية بإرجاع فارغة لـ xEl1 باستثناء عند إزالة مساحات الأسماء يدوياً :

XDocument xDoc = XDocument.Parse(CurrentString);
XElement xEl1 = xDoc.Element("E2ETraceEvent");
XElement xEl2 = xEl1.Element("System");
XElement xEl3 = xEl2.Element("Correlation");
XAttribute xAtt1 = xEl3.Attribute("ActivityID");
String sValue = xAtt1.Value;

كيف يمكنك كتابة التعليمات البرمجية لاستخراج Guid في XDocument؟






Related