【发布时间】:2012-09-17 03:09:56
【问题描述】:
我有一个包含多个 DETAIL 元素的 XML 文档。每个DETAIL 元素都可以包含UpdateDate 和Description 属性。例如,这是一个简短的示例:
<MyDocument>
<DETAIL UpdateDate='18-Sept-2012' />
<DETAIL UpdateDate='18-Sept-2012' Description='A description goes here' />
</MyDocument>
我需要对 XML 进行转换,使所有属性都成为子元素,例如:
<MyDocument>
<DETAIL>
<UpdateDate>18-Sept-2012</UpdateDate>
</DETAIL>
<DETAIL>
<UpdateDate>18-Sept-2012</UpdateDate>
<Description>A description goes here</Description>
</DETAIL>
</MyDocument>
我用来转换 XML 的方法如下所示:
Function ProcessDetail(ByVal xmlText As String) As String
Dim xmlDoc As New XmlDocument()
xmlDoc.LoadXml(xmlText)
Dim sDetail As New StringBuilder()
sDetail.Append("<DETAIL>")
For Each detailNode As XmlNode In xmlDoc.SelectNodes("//DETAIL")
If Not detailNode.Attributes Is Nothing Then
For Each attribute As XmlAttribute In detailNode.Attributes
sDetail.Append("<" & attribute.Name.ToUpper & ">" & attribute.Value & "</" & attribute.Name.ToUpper & ">")
Next
End If
Next
sDetail.Append("</DETAIL>")
Return sDetail.ToString()
End Function
此方法适用于大多数 DETAIL 元素,但在尝试转换如下所示的元素时会失败:
<DETAIL Description='Problem:<br><br>CRS750 dumps when panel F is opened' />
由于在属性值中保留了<和>等字符,所以会抛出异常:
error message - `'<', hexadecimal value 0x3C, is an invalid attribute character. Line 1, position 1326.`
如何修复我的方法,以便它可以转换这些类型的 DETAIL 元素而不会引发异常?
【问题讨论】:
-
我对您的问题进行了重大修改,以更清楚地说明我认为您的问题是什么。请查看并告诉我您是否认为我正确理解了您的问题。
标签: xml vb.net xml-parsing xsd