1

我无法弄清楚如何获取以下 XML 中的所有 ItemDetail 节点:

<?xml version="1.0" encoding="UTF-8"?>
<AssessmentMetadata xmlns="http://tempuri.org/AssessmentMetadata.xsd">
   <ItemDetails>
    <ItemName>I1200</ItemName>
    <ISC_Inactive_Codes>NS,NSD,NO,NOD,ND,NT,SP,SS,SSD,SO,SOD,SD,ST,XX</ISC_Inactive_Codes>
    <ISC_StateOptional_Codes>NQ,NP</ISC_StateOptional_Codes>
  </ItemDetails>
  <ItemDetails>
    <ItemName>I1300</ItemName>
    <ISC_Inactive_Codes>NS,NSD,NO,NOD,ND,NT,SP,SS,SSD,SO,SOD,SD,ST,XX</ISC_Inactive_Codes>
    <ISC_StateOptional_Codes>NQ,NP</ISC_StateOptional_Codes>
  </ItemDetails>
  <ItemDetails>
    <ItemName>I1400</ItemName>
    <ISC_Active_Codes>NC</ISC_Active_Codes>
    <ISC_Inactive_Codes>NS,NSD,NO,NOD,ND,NT,SP,SS,SSD,SO,SOD,SD,ST,XX</ISC_Inactive_Codes>
    <ISC_StateOptional_Codes>NQ,NP</ISC_StateOptional_Codes>
  </ItemDetails>
</AssessmentMetadata>

我尝试了很多事情,我认为这可能是命名空间问题,所以这是我最后一次尝试:

var xdoc = XDocument.Load(asmtMetadata.Filepath);
var assessmentMetadata = xdoc.XPathSelectElement("/AssessmentMetadata");
4

1 回答 1

2

您需要获取默认命名空间并在查询时使用它:

var ns = xdoc.Root.GetDefaultNamespace();
var query = xdoc.Root.Elements(ns + "ItemDetails");

您需要为任何元素添加前缀。例如,以下查询检索所有ItemName值:

var itemNames = xdoc.Root.Elements(ns + "ItemDetails")
                    .Elements(ns + "ItemName")
                    .Select(n => n.Value);
于 2012-07-16T18:34:32.593 回答