我有一个包含多个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
不引发异常的情况下转换这些类型的元素?