1
我对XML和LINQ都很新。我已经阅读了几本关于LINQ教程的XML,但没有一篇XML文档似乎按照我的方式进行格式化。我不确定是否(以及如何)改变了事情。XML到LINQ与元数据
我在互联网上阅读所有的例子似乎遵循这种格式:
<data>
<row>
<Term>201320</Term>
<Subj>ACCT</Subj>
<Subj_desc>Accounting</Subj_desc>
</row>
<row>
<Term>201320</Term>
<Subj>ACCT</Subj>
<Subj_desc>Accounting</Subj_desc>
</row>
</data>
如果我想读,我认为代码将是这个样子:
XDocument document = XDocument.Load("URLHERE.xml");
var term = from row in document.Descendants("row")
select new
{
Term = row.Element("Term").Value,
Subject = row.Element("Subj").Value,
Subject_Description = row.Element("Subj_desc").Value,
};
问题在于:我的XML文档不遵循相同的格式。不是为每个术语重复不同的标签,而是在顶部有一组元数据,然后对每组数据使用SAME标签。
这里是我的XML文档的样本:
<metadata>
<item name="TERM" type="xs:string" length="128"/>
<item name="SUBJ" type="xs:string" length="128"/>
<item name="SUBJECT_DESC" type="xs:string" length="512"/>
</metadata>
<data>
<row>
<value>201320</value>
<value>ACCT</value>
<value>Accounting</value>
</row>
<row>
<value>201320</value>
<value>ACCT</value>
<value>Accounting</value>
</row>
</data>
我将如何从中提取数据?
var term = from row in document.Descendants("row")
select new
{
Term = row.Element("value").Value,
Subject = row.Element("value").Value,
};
看起来不对。我正在使用C#顺便说一句(不知道我是否需要说或标签是否足够)。
关于不正确格式的XML文档,原来是正确的IEnumerable的,留下了从我的样品通过事故。 我试图提取标记之间的任何东西。最终,我要么对XML运行查询,要么将其全部放入列表中(我还没有确定它)。 –
rayden54
2013-04-28 23:26:37
我的答案中的最后一个LINQ查询将给出IEnumerable的行。当通过它们枚举时,你有一个IEnumerable被调用的值包含该行的3个值。由于价值元素没有属性,因此不可能将它们识别为术语,主题等,它们都只是价值元素。如果您可以控制XML的外观,那么添加属性在查询时会给您一个更好的结果 – James 2013-04-29 06:56:11