【发布时间】:2010-10-28 03:06:16
【问题描述】:
我正在实现 IXmlSerializable 的 ReadXml() 方法,我认为使用 XPath 可能是最好的方法。
但是,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 */
}
}
【问题讨论】:
标签: c# .net xml xml-serialization