8
votes

Extraire d'un élément XML d'un fichier XML à l'aide de XPATH

J'ai le document XML suivant:

  <MimeType>
     <Extension>.aab</Extension>
     <Value>application/x-authorware-</Value>
  </MimeType>
  <MimeType>
     <Extension>.aam</Extension>
     <Value>application/x-authorware-</Value>
  </MimeType>


3 commentaires

Êtes-vous obligé d'utiliser .NET 3.5? Si vous pouvez utiliser .NET 3.5, j'utiliserais XDocument et Linq vers XML, vous le trouverez plus simple que XPath.


Pas nécessairement. Il vaut mieux utiliser une combinaison de: Stackoverflow.com/Questtions/1294386/...


Oui forcé dans un coin .NET 2.


4 Réponses :


1
votes

Vous utilisez les classes dans le System.xml.xpath Espace de noms.

Tutoriels de MSDN


0 commentaires

15
votes

Utilisez xmldocument.selectSingLenode .

exemple: xxx

alors vous pouvez accéder à nœud.childnodes afin d'obtenir les valeurs que vous voulez (exemple ): xxx

puis utilisez ces valeurs lors de la construction de votre objet mimetype.

EDIT: Quelques informations XPath.
Il existe de très bons tutoriels XPath, essayez ici et ici . Le La recommandation W3C elle-même peut être un peu accablante.
Pour votre exemple, vous pouvez essayer d'utiliser le XPath suivant pour sélectionner le premier nœud mimeType dans le document (où root est le nom de votre élément racine): xxx

espère que cela aide!


3 commentaires

L'extrait de beignet résume tout ça! Il n'est guère plus difficile que ça. Vous voudrez peut-être vérifier ma réponse à la présente réponse à la section Stackoverflow.com/questions/1440184/... Pour une extraction plus longue indiquant les conditions d'erreur, ce qui est retourné lorsqu'il n'est pas trouvé, etc.


Ok je vais donner cela une chance ... une chance d'obtenir un exemple de xpath? Désolé d'être effronté?


Oui, ajouté des informations de XPath (liens + exemple simple) à ma réponse - espérons que cela aide.



2
votes

La méthode suivante doit fournir un cadre pour obtenir le type MIME ici

public MimeType RunXPath(string mimeType)
{
  XmlNode node = _xmlDoc.SelectSingleNode(
    string.Format("//MimeType/Extension[text()="{0}"]/ancestor::MimeType", mimeType));
  foreach(XmlNode node in nodes)
  {
    // Extract the relevant nodes and populate the Mime Type here...
  }

  return ...
}


0 commentaires

1
votes

Suivi sur La réponse de @Miffthefox , vous pouvez utiliser xpath strong> avec Linq à XML strong>. Voici un exemple basé sur vos échantillons de données.

1) strong> Tout d'abord, les espaces de noms dont vous aurez besoin: p> xxx pré>

2) strong> Chargez votre document XML dans un xelement code>: p> xxx pré>

3) strong> Définissez votre chemin de localisation XPath: xxx pré>

4) strong> passe le chemin d'accès à xpathselectelement () code> pour sélectionner l'élément d'intérêt: p> xxx pré>

5) strong> Enfin, extrayez la valeur MIMETYPE associée à l'extension: P>

var mimeType = (string)selectedElement.Element("Value");


0 commentaires