gpt4 book ai didi

c# - 使用 XPath 实现 IXmlSerializable ReadXml() 的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:45 25 4
gpt4 key购买 nike

我正在实现 IXmlSerializable 的 ReadXml() 方法,我认为使用 XPath 可能是执行此操作的最佳方式。

但是,ReadXml() 需要正确处理阅读器位置。

假设我的 WriteXml() 产生了这样的东西:

<ObjectName>
<SubNode>2</SubNode>
<SubNode>2</SubNode>
</ObjectName>

有没有比下面的(这种糟糕的方法)更好的方法来确保 Reader 之后正确定位?

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 */
}
}

最佳答案

我怀疑如果经常使用该方法,您可能会遇到一些性能问题。由于您的 xml 相对简单,我强烈怀疑您直接使用 XmlReader 会做得更好......

...但是这样做并不容易; IMO,最好尽量避免实现 IXmlSerializable(只是使用常规集合属性等)——这是导致错误和挫败感的常见原因。

关于c# - 使用 XPath 实现 IXmlSerializable ReadXml() 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com