在LINQ to XML處理XML命名空間
處理包含命名空間的XML資料時,正確處理命名空間對於檢索和操作所需元素至關重要。以下是如何使用LINQ to XML遍歷包含命名空間的XML:
提供的範例程式碼:
<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); var elements = from data in xmlElements.Descendants("Result") select new { TheBool = (bool)data.Element("TheBool"), TheId = (int)data.Element("TheId"), };</code>
當XML字串中使用命名空間時,此程式碼無法正確解析XML,導致出現空值。為了解決這個問題,我們需要在LINQ查詢中明確指定XML命名空間。
在LINQ查詢中定義XML命名空間,可以使用XNamespace
物件。此物件可讓您建立具有適當命名空間前綴和URI的XName
實例。
以下是修正後的程式碼:
<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); XNamespace ns = "http://myvalue.com"; XNamespace nsa = "http://schemas.datacontract.org/2004/07/My.Namespace"; var elements = from data in xmlElements.Descendants(ns + "Result") select new { TheBool = (bool)data.Element(nsa + "TheBool"), TheId = (int)data.Element(nsa + "TheId"), };</code>
在修正後的程式碼中,我們先使用命名空間URI宣告XNamespace
物件ns
和nsa
。然後,在Descendants
和Element
查詢中,我們指定帶有命名空間前綴的XName
。透過這種方式,LINQ to XML可以正確識別和存取指定命名空間中的元素。
以上是如何使用 LINQ to XML 正確解析帶有命名空間的 XML?的詳細內容。更多資訊請關注PHP中文網其他相關文章!