我正在努力解決如何在當前結構化但不嚴格的XML文件的文件上使用Linq到XML。它們是格式良好的文件,但不包含XML聲明。他們實際上是SGML文件。Linq到結構化文檔上的XML查詢
目前我有:
private void Find_element_attribute_Click(object sender, EventArgs e)
{
if (comboBox2.Text != "")
{
string[] projectFiles = Directory.GetFiles(path, typeExtention, SearchOption.AllDirectories);
foreach (string file in projectFiles)
{
XElement root = XElement.Load(file);
IEnumerable<XElement> selectedElement = from el in root.Elements(Element_textBox.Text)
where (string)el.Attribute(Attribute_textBox.Text) == Value_textBox.Text
select el; //need to selct the DMC and title and put in a variable, and list them
foreach (XElement el in selectedElement)
MessageBox.Show("text" + el);
}
}
MessageBox.Show("Please select a project to query");
}
這將引發exeption由於第二行上的一個「[」字符。該字符是文檔中實體列表的開頭括號。
我能想到做這個工作的唯一方法是添加一個XML聲明到我的文檔的開始,當我打開它們,然後使用Linq查詢文檔,然後刪除聲明。不過,我不知道如何去做這件事。任何幫助讚賞。
我的文檔的開始看起來像
<!--Arbortext, Inc., 1988-2009, v.4002-->
<!DOCTYPE DMODULE PUBLIC "-//AECMA CSDB//DTD Air Vehicle Engines Equipment Description 19980102//EN" [
<!ENTITY ICN-BR8412XXXXXXX-1CX-AG30000-A-K7626-01966-A01-1 SYSTEM "ICN-BR8412XXXXXXX-1CX-AG30000-A-K7626-01966-A01-1.cgm" NDATA cgm>
<!ENTITY ICN-BR8412XXXXXXX-1CX-AG30000-A-K7626-01964-A01-1 SYSTEM "ICN-BR8412XXXXXXX-1CX-AG30000-A-K7626-01964-A01-1.cgm" NDATA cgm>
<!ENTITY ICN-BR8412XXXXXXX-1CX-AG30000-A-K7626-01963-A01-1 SYSTEM "ICN-BR8412XXXXXXX-
]>
<dmodule><idstatus>
<dmaddres>
<dmc><avee><modelic>XXXXXXAXXXXXX</modelic><sdc>1AX</sdc><chapnum>AG3</chapnum>
<section>0</section><subsect>0</subsect><subject>00</subject><discode>01</discode>
<discodev>00</discodev><incode>018</incode><incodev>A</incodev><itemloc>A
</itemloc></avee></dmc>
<dmtitle><techname>Equipment - INTRODUCTION</techname><infoname>Introduction
</infoname>
</dmtitle>
<issno issno="001" type="new">
<issdate year="2012" month="11" day="30"></dmaddres>
<status>
<security class="3">
<rpc> </rpc>
<orig> </orig>
<applic></applic>
<techstd>
<autandtp>
<authblk>Chap 1</authblk>
<tpbase>8412(A)</tpbase>
</autandtp>
<authex></authex>
<notes></notes>
</techstd>
<qa>
<firstver type="tabtop"></qa>
</status>
</idstatus><content>
<refs>
<norefs></refs>
<descript>
<para0><title>INTRODUCTION</title>
你能提供樣本輸入嗎? – Vitaliy 2013-02-19 14:21:38
你檢查了[SGMLReader](https://github.com/MindTouch/SGMLReader)嗎? – 2013-02-19 14:23:39
它不需要用於讀取xml文檔的xml聲明。 – 2013-02-19 14:27:22