C# LINQ到XML导航文件

C# LINQ到XML导航文件,c#,linq-to-xml,C#,Linq To Xml,我是LinqtoXML新手,在使用Xdocument(在本例中)从XML文件提取特定值并至少将其返回到控制台时遇到了问题 在XLM中,我只需要显示某些值;4GB49359408000-JENEP18082014A、A1、20(在统计价值元素中)等 任何指点都将不胜感激-谢谢 讨论中的XML是 <?xml version="1.0" encoding="utf-8"?> <declarationGbResponse xmlns:xsd="http://www.w3.org/2

我是LinqtoXML新手,在使用Xdocument(在本例中)从XML文件提取特定值并至少将其返回到控制台时遇到了问题

在XLM中,我只需要显示某些值;4GB49359408000-JENEP18082014A、A1、20(在统计价值元素中)等

任何指点都将不胜感激-谢谢

讨论中的XML是

  <?xml version="1.0" encoding="utf-8"?>
<declarationGbResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="demo.com/test/DeclarationGbResponse">
  <declarationIdentity>
    <declarationUcr xmlns="demo.org.uk/DeclarationGbIdentityType">4GB493594008000-JENEXP18082014A</declarationUcr>
  </declarationIdentity>
  <responseType>ACC</responseType>
  <responseTime>2014-08-18T13:36:32.79</responseTime>
  <isFirstAcceptanceResponse>true</isFirstAcceptanceResponse>
  <externalReferences/>
  <!-- element -->
  <acceptanceResponse>
  <!-- element -->
    <ICS xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">A1</ICS>
    <entryRoute xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">H</entryRoute>
    <statusOfExportEntry xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">1</statusOfExportEntry>
    <entryTime xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">2014-08-18T13:36:00</entryTime>
    <entryEpuNumber xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">120</entryEpuNumber>
    <entryNumber xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">A05605F</entryNumber>
    <entryVersionNumber xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">1</entryVersionNumber>
    <movementReferenceNumber xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">14GB08X33073603018</movementReferenceNumber>
    <declarationExchangeRate xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">1</declarationExchangeRate>
    <declarationCurrency xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">
      <currencyCode xmlns="demo.org.uk/test/Currency">GBP</currencyCode>
    </declarationCurrency>
    <customsValueForDuty xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">
      <value xmlns="demo.org.uk/test/MonetaryType">20</value>
    </customsValueForDuty>
    <customsDutyPayable xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">
      <value xmlns="demo.org.uk/test/MonetaryType">0</value>
    </customsDutyPayable>
    <deferedRevenue xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">
      <value xmlns="demo.org.uk/test/MonetaryType">0</value>
    </deferedRevenue>
    <immediateRevenue xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">
      <value xmlns="demo.org.uk/test/MonetaryType">0</value>
    </immediateRevenue>
    <revenuePayable xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">
      <value xmlns="demo.org.uk/test/MonetaryType">0</value>
    </revenuePayable>
    <itemResponses xmlns="demo.org.uk/test/DeclarationGbAcceptanceResponse">
      <itemResponse>
        <itemNumber xmlns="demo.org.uk/test/DeclarationGbItemResponse">1</itemNumber>
        <statisticalValue xmlns="demo.org.uk/test/DeclarationGbItemResponse">
          <value xmlns="demo.org.uk/test/MonetaryType">20</value>
        </statisticalValue>
      </itemResponse>
    </itemResponses>
  </acceptanceResponse>
</declarationGbResponse

4GB493594008000-JENEXP18082014A
行政协调会
2014-08-18T13:36:32.79
真的
A1
H
1.
2014-08-18T13:36:00
120
A05605F
1.
14GB08X33073603018
1.
英镑
20
0
0
0
0
1.
20

XML在不同级别声明了不同的默认名称空间,您需要非常小心才能看到哪个元素在哪个名称空间中

在您不知道的情况下,默认名称空间是派生给子元素的。也就是说,在同一名称空间(祖先的名称空间)中,将声明默认名称空间的元素及其所有不带前缀和不同默认名称空间声明的后代视为同一名称空间。例如,由于没有前缀或不同的默认命名空间声明,因此在其父级的命名空间中考虑了元素“demo.com/test/DeclarationGbResponse”

要选择命名空间中的元素,可以使用“
XNamespace
+元素的本地名称”:

XDocument doc = /* load your XML to XDocument */
XNamespace gbResponse = "demo.com/test/DeclarationGbResponse";
XNamespace gbIdentityType = "demo.org.uk/DeclarationGbIdentityType";
XNamespace gbAcceptanceRespons = "demo.org.uk/test/DeclarationGbAcceptanceResponse";
XNamespace gbItemResponse = "demo.org.uk/test/DeclarationGbItemResponse";
XNamespace monetaryType = "demo.org.uk/test/MonetaryType";
var declarationUcr = (string)doc.Root
                                .Element(gbResponse + "declarationIdentity")
                                .Element(gbIdentityType + "declarationUcr");
var ICS = (string)doc.Root
                     .Element(gbResponse + "acceptanceResponse")
                     .Element(gbAcceptanceRespons + "ICS");
var value = (string)doc.Root
                       .Element(gbResponse + "acceptanceResponse")
                       .Element(gbAcceptanceRespons + "itemResponses")
                       .Element(gbAcceptanceRespons + "itemResponse")
                       .Element(gbItemResponse + "statisticalValue")
                       .Element(monetaryType + "value");
Console.WriteLine(declarationUcr);
Console.WriteLine(ICS);
Console.WriteLine(value);