查詢XML我問這個問題前面,我得到了非常快速的和有益的對策:Linq to XML query not picking up any values異常使用LINQ
我跟着意見,給出的答案標記爲正確的哪些工作,讓我拿起「產品'標籤。我現在正在'產品'標籤內搜索,以找到值導入到我的數據庫,我有點卡住了。
這裏是我的XML文件的結構:
<?xml version="1.0"?>
<!DOCTYPE ONIXMessage SYSTEM "http://www.editeur.org/onix/2.1/reference/onix-international.dtd">
<ONIXMessage xmlns="http://www.editeur.org/onix/2.1/reference" release="2.1">
<Header>
<FromCompany>MyCo</FromCompany>
<FromPerson>Joe Bloggs</FromPerson>
<FromEmail>[email protected]</FromEmail>
<SentDate>20120522</SentDate>
</Header>
<Product>
<ProductForm>DG</ProductForm>
<Title>
<TitleType>01</TitleType>
<TitleText>Blogg</TitleText>
</Title>
<WorkIdentifier>
<WorkIDType>15</WorkIDType>
<IDValue>PI3564231</IDValue>
</WorkIdentifier>
<Language>
<LanguageRole>01</LanguageRole>
<LanguageCode>eng</LanguageCode>
</Language>
</Product>
</ONIXMessage>
這裏是我的代碼片段:
XElement onix = XElement.Load(fs);
// Get all the product information.
//
var products = onix.Descendants().Where(m => m.Name.LocalName == "Product").ToList();
foreach (var p in products)
{
try
{
prod.Title = p.Elements("Title").First(t => (t.Element("TitleType").Value == "01")).Element("TitleText").Value;
//further processing
}
catch (Exception exp)
{
throw new FileProcessingException("Unable to process product.", exp);
}
}
當我搜索標題文本如上圖所示,異常被捕獲。例外是「對象引用未設置爲對象的實例」。該項目顯然在XML文件中,它只是沒有正確選擇它。
我從來沒有見過.toda之前,我得到了什麼意思,但從我讀的我應該能夠使用.Elements()這裏呢?
任何人都可以看到什麼可能是錯的?
您能告訴我們錯誤發生的位置以及Exception的說明嗎? – JDB
此外,.First()是棘手的,因爲如果沒有發現任何東西,它將拋出一個異常。如果沒有發現任何內容,則FirstOrDefault()將返回Null,如果不測試Null,則仍然會導致NullReferenceException。 – JDB
如果你在失敗的線上放置一個斷點並評估p.Element(「Title」),它是否包含任何元素?如果你評估'p.Elements(「Title」)。First(t =>(t.Element(「TitleType」)。Value ==「01」))''是異常來自哪裏? –