【发布时间】:2011-03-17 11:29:44
【问题描述】:
我需要将 xml 文档从数据库记录读取到 XDocument 对象中,以便对其进行反序列化。为了使反序列化起作用,我需要为每个 1 级元素应用一个特定的命名空间。所以 XML 看起来有点像这样:
<Itinerary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Segments>
<SegmentFlight>
</SegmentFlight>
<!-- more child elements -->
</Segments>
<References>
<!-- child elements -->
</References>
<Fares>
<!-- child elements -->
</Fares>
</Itinerary>
我需要它看起来像这样:
<Itinerary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Segments xmlns="http://myurl">
<SegmentFlight>
</SegmentFlight>
<!-- more child elements -->
</Segments>
<References xmlns="http://myurl">
<!-- child elements -->
</References>
<Fares xmlns="http://myurl">
<!-- child elements -->
</Fares>
</Itinerary>
但是当我运行以下代码将命名空间应用到行程节点中的每个顶级元素时:
Dim xmlDoc As XDocument = XDocument.Load(New System.IO.StringReader(xmlStringFromDB))
Dim ns As XNamespace = "http://myurl"
For Each elem In xmlDoc.Descendants("Itinerary").Elements
elem.Name = ns + elem.Name.LocalName
Next
我在该元素中的每个子元素上都得到一个空白的 xmln="" 命名空间属性,这会导致反序列化失败:
<Itinerary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Segments xmlns="http://myurl">
<SegmentFlight xmlns="">
<!-- etc ... -->
</Segments>
如何防止将空白/空命名空间添加到已应用所需命名空间的元素的每个子元素中?
【问题讨论】:
标签: vb.net linq-to-xml xml-namespaces xelement