Я очень новичок в XML и LINQ. Я прочитал несколько руководств по XML для LINQ, но ни один из 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# BTW (не уверен, что мне нужно сказать это, или если тег достаточно).
Относительно неправильно отформатированный документ XML, оригинал правильно, слева, что от моего образца случайно. Я пытаюсь извлечь что-нибудь между тегами. В конце концов, я либо хочу запустить запрос в XML, либо выбросить все это в список (я еще не решил, пока). –
rayden54
Последний запрос LINQ в моем ответе даст IEnumerable of Row. При перечислении через них у вас есть IEnumerable вызываемые значения, содержащие 3 значения для этой строки. Поскольку элементы значения не имеют атрибутов, их невозможно идентифицировать как «Термин», «Тема» и т. Д., Они являются всего лишь элементами значения. Если у вас есть контроль над тем, как выглядит XML, добавление атрибута даст вам гораздо более приятный результат при запросе его – James