需要删除 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&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&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");
我有下面的 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&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&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");