0
Answer

XML Validation and XPath.

david_b_mcconnell

david_b_mcconnell

21y
2.2k
1
Hi, I am having a problem using XPath when I validate Xml documents with a schema. Basically what happens is that an XPath query doesn't return the nodes I require if a schema is used to validate the XML. I'll try and explain it as briefly as possible here. Consider the following XML. XML Book One Publisher XML Book Two Publisher When I execute the following code 2 nodes are returned by the XPath query and this output is produced in the debug pane; Count = 2 XML Book One XML Book Two XmlTextReader reader = new XmlTextReader(@"C:\books.xml"); XmlValidatingReader vreader = new XmlValidatingReader(reader); vreader.ValidationType = ValidationType.Schema; XPathDocument xmldoc = new System.Xml.XPath.XPathDocument(vreader); XPathNavigator nav = xmldoc.CreateNavigator(); nav.MoveToRoot(); nav.MoveToFirstChild(); XmlNamespaceManager nsMgr = new XmlNamespaceManager(nav.NameTable); nsMgr.AddNamespace( "ns" , nav.NamespaceURI ); XPathExpression xPathExpr = nav.Compile("//Publisher[. = 'Publisher']/parent::node()/Title"); xPathExpr.SetContext(nsMgr); XPathNodeIterator iterator = nav.Evaluate(xPathExpr) as XPathNodeIterator; System.Diagnostics.Debug.WriteLine("Count = " + iterator.Count.ToString()); while ( iterator.MoveNext() ) System.Diagnostics.Debug.WriteLine(iterator.Current.Value); However, if i validate the same Xml with a schema as illustrated below; XML Book One Publisher XML Book Two Publisher The XML is validated by the schema without error but no nodes are returned by the XPath query. What is going wrong? Thanks.