访问XML Document Best Pratice

来源:互联网 发布:希尔伯特矩阵 正定 编辑:程序博客网 时间:2024/06/05 14:23

针对XML的Readonly属性,可以选择两种方式读取XML Document.

查询时,用XPathDocument,快速只读操作。

可写,用XMLDocument。

 

ObjectXXX el = ReadObject(fileName);

StringBuilder doc = XMLSerializeObject(el);
Navigator = GetXPathNavigator(doc.ToString(), true);

 

        private ObjectXXX ReadObject(string filename)
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read);
            ObjectXXX el = (ObjectXXX )formatter.Deserialize(stream);
            stream.Close();
            stream.Dispose();
            return el;
        }

 

private StringBuilder XMLSerializeObject(object classObj)
        {
            XmlSerializer ser = new XmlSerializer(classObj.GetType());
            StringBuilder doc = new StringBuilder();
            TextWriter tw = new StringWriter(doc);
            ser.Serialize(tw, classObj);
            tw.Close();
            tw.Dispose();
            return doc;
        }

 

public XPathNavigator GetXPathNavigator(string doc, bool isReadOnly)
        {
            XPathNavigator xpnav = null;
            XmlTextReader xmlreader = new XmlTextReader(new StringReader(doc));

            XmlTextReader xmlreader = new XmlTextReader(fileName);

            try
            {
                if (isReadOnly)
                {
                    XPathDocument xpdoc = new XPathDocument(xmlreader);
                    xpnav = xpdoc.CreateNavigator();
                }
                else
                {
                    XmlDocument xdoc = new XmlDocument();
                    xdoc.Load(xmlreader);
                    xpnav = xdoc.CreateNavigator();
                }

                return xpnav;
            }
            finally
            {
                xmlreader.Close();
            }
        }

 

 

如果XMLDocument 有他自己的Namespace的话,则需要添加XMLNamespaceManager.

for example:

newbooks.xml

 

<?xml version='1.0'?>
<bookstore xmlns=http://test.com>
  <book genre="novel" style="hardcover">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" style="other">
    <title>The Poisonwood Bible</title>
    <author>
      <first-name>Barbara</first-name>
      <last-name>Kingsolver</last-name>
    </author>
    <price>11.99</price>
  </book>
</bookstore>

 

XmlDocument doc = new XmlDocument();
doc.Load("newbooks.xml");
// Create an XmlNamespaceManager to resolve the default namespace.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("p", "urn:newbooks-schema");

// Select and display all book titles.
      XmlNodeList nodeList;
      XmlElement root = doc.DocumentElement;
      nodeList = root.SelectNodes("/p:bookstore/p:book/p:title", nsmgr);
      foreach (XmlNode title in nodeList) {
        Console.WriteLine(title.InnerXml);
      }

 

原创粉丝点击