2009-08-26 17 views
0

XmlドキュメントのSizeオブジェクトとPointオブジェクトを読み/解析するためのより洗練された構文がありますか?XmlDocumentからオブジェクトのサイズと位置を解析するには?

ソースXMLノード:

<objSize>{Width=64, Height=64}</objSize> 
<Location_X>20</Location_X> 
<Location_Y>20</Location_Y> 

現在、私が使用して:サイズの場合 :ポイントの

Dim sizeNode As String = objSize.InnerText 
    Dim sizeText() As String = sizeNode.Split(CChar("=")) 
    Dim width As Integer = XmlConvert.ToInt32(sizeText(1).Split(CChar(","))(0)) 
    Dim height As Integer = XmlConvert.ToInt32(sizeText(2).TrimEnd(CChar("}"))) 
    Dim newSize as New Size(width, height) 

Dim newLocation As Point 
newLocation = New Point(XmlConvert.ToInt32(objNode.InnerText), newLocation.Y) 
newLocation = New Point(newLocation.X, XmlConvert.ToInt32(objNode.InnerText)) 

私は何かが欠けていますように、私はしつこい感じを持っています? ソースノードと解析コードの両方を制御できます...私はXmlNodeの作成に怠け者になっていますか? XmlConvert v.sを使用する利点はありますか。 integer.parse(または.tryparse)を使用していますか?あなたはフォーマットをコントロールしている場合

答えて

0

、その後、より良いアプローチは、例えば、2つの要素や属性を持つ要素にサイズを分解するために、次のようになります。

<objSize Width="64" Height="64"/> 

私は場所のために同じことをしたい - ないそれこと多くの事柄が、それはすっきり見えます、そしてそれは、単一のデータが良いポイントであることを強調している:

<Location X="20" Y="20"/> 

XmlConvertParseとの差がXML Schema specificationからのものであり、解析のために元の用途に非常に具体的なルール、ということです。 Int32については、違いはないと私は信じている。

型付きノードを扱うもう1つの方法は、XMLをスキーマ(これらの要素や属性のすべてがタイプxs:intであることを指定する)に対して検証してからXPathNavigator.TypedValueを使用することです。例えば:

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を使用して厳密に型指定されたオブジェクトグラフに解析するだけで、すべてのコンバージョンを処理します。

+0

このような回答をいただきありがとうございました! – PersistenceOfVision

関連する問題