12
votes

Comment sélectionner des nœuds avec XPath en C #?

Question simple, je veux juste sélectionner le texte à partir de la balise . Voici ce que j'ai, mais le XPath ne correspond à rien.

public static void TestXPath()
{
    string xmlText = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
    xmlText += "<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">";
    xmlText += "<Template>Normal</Template>  <TotalTime>1</TotalTime>  <Pages>1</Pages>  <Words>6</Words>";
    xmlText += "</Properties>";

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(new System.IO.StringReader(xmlText));

    foreach (XmlNode node in xmlDoc.SelectNodes("//Template"))
    {
        Console.WriteLine("{0}: {1}", node.Name, node.InnerText);
    }
}


0 commentaires

4 Réponses :


26
votes

Vous devez utiliser un xmlnamespacemanager parce que l'élément de modèle est dans un espace de noms: xxx


0 commentaires

7
votes

c'est une question d'espace de noms; Vous devez obtenir le tableau-table, choisir un alias et utiliser cela dans votre requête. Ou peut-être (dans ce cas) essayez getelementsbytagname . xxx

ou: xxx


1 commentaires

Je n'avais aucune idée que vous deviez choisir un alias arbitraire pour résoudre correctement les requêtes XPath de cette manière! Merci pour l'info Marc.



4
votes

Ici, votre expression XPath nécessite une résolution d'espace de noms. Vous devez instancier un xmlnamespacakeanager et l'utiliser dans vos notes sélectionnées.

Cet échantillon doit fonctionner P>

string s = xmlDoc.DocumentElement.GetNamespaceOfPrefix("");
nsmgr.AddNamespace("ns", s);


0 commentaires

2
votes

Pourquoi avez-vous besoin de l'espace de noms de toute façon? Il suffit de me débarrasser de ces xxx

et votre sélection fonctionnera.


0 commentaires