La requête d'un XmlDocument sans faire une "préfixe d'espace de Noms n'est pas défini" problème

J'ai un document Xml qui définit et les références de certains espaces de noms. Je le charge dans un objet XmlDocument et au meilleur de mes connaissances, j'ai créer un XmlNamespaceManager objet de requête Xpath contre. Le problème c'est que je suis XPath exceptions que l'espace de noms "mon" n'est pas défini. Comment puis-je obtenir le gestionnaire de noms de voir que les espaces de noms, je suis le référencement sont déjà définis. Ou plutôt comment puis-je obtenir les noms des définitions à partir du document de l'espace de noms du gestionnaire.

En outre tt me paraît étrange que vous ayez à fournir un espace de noms manager pour le document que vous créez à partir de documents nametable en premier lieu. Même si vous avez besoin de coder en dur le manuel des espaces de noms, pourquoi ne pouvez-vous pas de les ajouter directement dans le document. Pourquoi avez-vous de toujours avoir à passer cet espace de noms manager avec chaque requête? Ce qui ne peut pas XmlDocument sais juste?

Code:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(programFiles + @"Common Files\Microsoft Shared\web server extensions\TEMPLATE\FEATURES\HfscBookingWorkflow\template.xml");
XmlNamespaceManager ns = new XmlNamespaceManager(xmlDoc.NameTable);

XmlNode referenceNode = xmlDoc.SelectSingleNode("/my:myFields/my:ReferenceNumber", ns);
referenceNode.InnerXml = this.bookingData.ReferenceNumber;

XmlNode titleNode = xmlDoc.SelectSingleNode("/my:myFields/my:Title", ns);
titleNode.InnerXml = this.bookingData.FamilyName;

Xml:

  <?xml version="1.0" encoding="UTF-8" ?> 
  <?mso-infoPathSolution name="urn:schemas-microsoft-com:office:infopath:Inspection:-myXSD-2010-01-15T18-21-55" solutionVersion="1.0.0.104" productVersion="12.0.0" PIVersion="1.0.0.0" ?> 
  <?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?> 
  <my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-01-15T18:21:55" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003">
  <my:DateRequested xsi:nil="true" /> 
  <my:DateVisited xsi:nil="true" /> 
  <my:ReferenceNumber /> 
  <my:FireCall>false</my:FireCall> 

Mise à jour:

ns.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
ns.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");
ns.AddNamespace("xd", "http://schemas.microsoft.com/office/infopath/2003");
ns.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-01-15T18:21:55");

Ce fait le boulot, mais ça veut dire que je dois coder en dur à ce schéma xml. Ce schéma représente un modèle de formulaire infopath. En particulier, le mon espace de noms d'url sera différent pour chaque modèle de formulaire donc je ne veux vraiment pas coder en dur. Il serait bien de trouver un moyen propre à obtenir cet espace de noms à partir du xml sans avoir recours à l'expression régulière.

J'espérais que le XmlNamespaceManager serait juste une sorte de ramasser les noms des définitions forme le NameTable. Je veux dire leur dans le Xml, mais j'ai encore à définir.

OriginalL'auteur Dan Revell | 2010-03-24

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *