Если вы управляете форматом, то лучшим подходом было бы разделить размер на два элемента или элемент с атрибутами, например ::
<objSize Width="64" Height="64"/>
Я бы сделал то же самое для определения местоположения - это не так важно, но выглядит аккуратно и подчеркивает, что это лучшая точка данных:
<Location X="20" Y="20"/>
Разница между XmlConvert
и Parse
заключается в том, что в первом используются очень специфические правила синтаксического анализа, которые относятся к спецификации XML-схемы . Для Int32
я думаю, что нет никакой разницы.
Еще один способ справиться с типизированными узлами - это проверить ваш XML по схеме (где вы должны указать, что все эти элементы и / или атрибуты имеют тип xs:int
), а затем использовать XPathNavigator.TypedValue
. E.g.:
Dim doc As XmlDocument
doc.Load(...)
doc.Schemas.Add(Nothing, "my_schema.xsd")
doc.Validate()
....
Dim sizeNode As XmlNode = ...
Dim sizeNodeNav = sizeNode.CreateNavigator()
' Validation performed above ensures that value returned
' by TypedValue below will be of expected type
Dim width = CType(sizeNodeNav.SelectSingleNode("@Width").TypedValue, Integer)
Dim height = CType(sizeNodeNav.SelectSingleNode("@Height").TypedValue, Integer)
Кроме того, вы можете использовать XPathNaigator.ValueAsInt()
метод и пропустить проверку:
Dim width = sizeNodeNav.SelectSingleNode("@Width").ValueAsInt
Все эти способы используют XmlConvert
для внутреннего использования.
Кроме того, если ваш документ достаточно хорошо структурирован, вы можете просто использовать XmlSerializer
для анализа его в строго типизированном графе объектов - он будет обрабатывать все преобразования за вас.