需要删除 xml 文件中的 header?

Removing header in xml file required?

我有下面的 xml 文件,我想使用 LINQ to XML 从 Instrmt 元素中检索 sym 属性。为此,我是否必须删除第一行:FIXML element?

如果我这样做,那么下面的代码就可以工作了:

IEnumerable<string> symbols = from c in xml.Descendants("Instrmt")
                              select (string)c.Attribute("Sym");

这里是 xml.

<FIXML r="20030618" s="20040109" v="4.4" xr="FIA" xv="1" xmlns="http://www.fixprotocol.org/FIXML-4-4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://www.fixprotocol.org/FIXML-4-4 https://optionsclearing.com/components/docs/membership/dds_ref/fia_1_1/fixml-main-4-4-FIA-1-1.xsd">
  <Batch>
    <SecList ListTyp="109" ListID="20175" BizDt="2017-12-07">
      <SecL Ccy="USD">
       <Instrmt Desc="iShares S&amp;P 100 ETF" SecTyp="OPT" SubTyp="ETO" Sym="OEF" Mult="100.0">
         <AID AltID="00013" AltIDSrc="RBHP"/>
       </Instrmt>
       <InstrmtExt>
         <Attrb Typ="101" Val="1.0000"/>
         <Attrb Typ="108" Val="1.0000"/>
       </InstrmtExt>
       <Undly Desc="iShares S&amp;P 100 ETF" Px="117.110000" Ccy="USD" Sym="OEF" ID="464287101" Src="1"/>
       <Stip Typ="RBHMIN" Val="2.500"/>
       <Stip Typ="CPMMIN" Val="3.750"/>
      </SecL>
   </SecList>
  </Batch>
</FIXML>

好的,您的问题不在于 header,而在于命名空间(由 xmlns 属性定义)。当您的 xml 定义一个时,您所有的 xml children 元素都将其作为默认值。试试下面的代码:

var xml = XDocument.Load(pathToFile);
XNamespace ns = xml.Root.GetDefaultNamespace();
IEnumerable<string> symbols = from c in xml.Descendants(ns + "Instrmt")
                              select (string)c.Attribute("Sym");