【问题标题】:reading xml with Linq使用 Linq 读取 xml
【发布时间】:2012-07-15 15:16:02
【问题描述】:

我不知道如何获取以下 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");

【问题讨论】:

    标签: xml-parsing linq-to-xml


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多