2.0 Crear un XmlNamespaceManager basandose en un fichero XML
Artículo por Club Developers · 28 agosto 2006
2103 vistas
Podemos ver cómo [iurl=91&all=0&fs=1229#1230]leer un fichero XML con las clases de XPath[/iurl]. En el caso de tener el fichero XML namespaces, hemos usado la clase XmlNamespaceManager para gestionar estos namespaces. El único defecto es que alimentamos manualmente estos datos. Veamos cómo crear este XmlNamespaceManager de forma automática.
Fichero XML usado para el ejemplo:
Su implementación:
Fichero XML usado para el ejemplo:
xml
<rd:Recordbook xmlns:rd="http://myexemple/myschema/record"> <rd:Records> <rd:Record> <rd:FirstValue>10</rd:FirstValue> <rd:SecondValue>51</rd:SecondValue> </rd:Record> <rd:Record> <rd:FirstValue>25</rd:FirstValue> <rd:SecondValue>38</rd:SecondValue> </rd:Record> </rd:Records> </rd:Recordbook>
Su implementación:
csharp
using System.Collections.Generic; using System.Xml; using System.Xml.XPath; ... private XmlNamespaceManager GetXmlNamespaceManager(XPathNavigator nav) { XmlNamespaceManager mgr = null; nav.MoveToFirstChild(); foreach (KeyValuePair<string, string> keyPair in nav.GetNamespacesInScope(XmlNamespaceScope.Local)) { if (mgr == null) mgr.AddNamespace(keyPair.Key, keyPair.Value); } nav.MoveToRoot(); return mgr; } private void TraiteXml(string fileName) { XPathNavigator nav = doc.CreateNavigator(); XmlNamespaceManager mgr = GetXmlNamespaceManager(nav); if (mgr != null) { XPathNodeIterator iter = nav.Select ("rd:Recordbook/rd:Records/rd:Record", mgr); while (iter.MoveNext()) { string firstValue = iter.Current.SelectSingleNode ("rd:FirstValue", mgr).Value; string secondValue = iter.Current.SelectSingleNode ("rd:SecondValue", mgr).Value; } } }