2
我正在實現IXmlSerializable的ReadXml()方法,而使用XPath的圖可能是最好的方法。使用XPath實現IXmlSerializable ReadXml()的最佳方法
但是,ReadXml()需要正確處理閱讀器位置。
所以給我的中WriteXML()產生這樣的:
<ObjectName>
<SubNode>2</SubNode>
<SubNode>2</SubNode>
</ObjectName>
難道還有比一個更好的方式(這種可怕的方式)以下,以確保閱讀器之後的位置是否正確?
public override void ReadXml(System.Xml.XmlReader reader)
{
reader.Read(); /* Read Opening tag */
/* Using reader.ReadStartElement("ObjectName") reads forward a node,
i.e. current node becomes the first <SubNode>
whereas Read() doesn't even when the documentation says they both do
*/
XPathNavigator n = MakeXPathNavigator(reader.ReadSubtree());
XPathNodeIterator nodes = n.Select(".//SubNode");
while (nodes.MoveNext())
{
/* Do stuff with nodes */
_values.Add(nodes.Current.ValueAsInt);
}
reader.Skip(); /* Skip reader forward */
}
public static XPathNavigator MakeXPathNavigator(XmlReader reader)
{
try
{
return new XPathDocument(reader).CreateNavigator();
}
catch(XmlException e)
{
throw e; /* Maybe hide/deal with exception */
}
}
感謝您的意見。我最初使用XmlReader,代碼不是特別清楚,看起來不像它會很好地處理錯誤。在這裏表現並不是一個大問題,我想我也想把自己的頭腦也包括在內。 – 2009-05-22 04:50:56