2010-04-15 3 views
2

J'ai un fichier XML que j'essaie d'analyser avec Linq-to-XML. L'un des nœuds contient un peu de HTML, que je ne peux pas récupérer.Linq-to-XML n'obtenant pas le contenu d'un noeud contenant des balises html

Le XML ressemble à:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<root> 
<image><img src="/Images/m1cznk4a6fh7.jpg" /></image> 
<contentType>Banner</contentType> 
</root> 

Le code est:

XDocument document = XDocument.Parse(content.XML); 
XElement imageElement = document.Descendants("image").SingleOrDefault(); 
image = imageElement.Value; // Doesn't get the content, while if I specify .Descendants("contentType") it works 

Toutes les idées?

Répondre

1

.Value signifie tout texte dans une balise et les balises enfants, mais vous n'en avez pas. Lorsque vous l'avez analysé, <img/> a été considéré comme une balise XML, pas spécifique au HTML (Linq ne connaît pas la différence). Par exemple, si vous avez écrit votre XML comme suit:

<image> 
    <img>/Images/m1cznk4a6fh7.jpg 
    </img> 
</image> 

Votre code fonctionnerait alors.

Vous devrez aller plus loin dans vos décrets à la balise <img/>, puis obtenir le .Value de l'attribut src pour récupérer le texte dont vous avez besoin.

+0

La question ne dit pas vraiment qu'ils cherchaient la section 'src' de la balise, ils ont juste dit le HTML à l'intérieur. Une section CDATA serait requise. – James

+0

Pourquoi est-ce la réponse acceptée? –

+0

Wow, beaucoup de colère ici. James et Nathan, vous allez bien aller? Il n'a pas dit qu'il avait la possibilité de changer le format de son XML, seulement qu'il voulait lire le contenu ('.Value'). Afin d'utiliser Linq en XML comme il l'utilise, il doit obtenir la valeur de l'attribut 'src'. –

1

Si vous stockez du code HTML dans les éléments XML, il doit figurer dans un commentaire <![CDATA[]]> afin que LINQ2XML ne le traite pas comme un balisage XML supplémentaire.

<image><![CDATA[<img src="Images/abc.jpg />]]></image> 

Si ma mémoire est bonne, vous ne devriez pas avoir à faire quelque chose de spécial pour extraire la valeur sans commentaire CDATA emballage, mais vous devrez peut-être appeler une propriété autre que Value. Je ne me souviens pas très bien.

+0

Tbh, ce n'est pas vraiment correct. C'est dans une certaine mesure, mais j'essaye de le faire avec le xml tel quel, donc les autres réponses étaient plus précises que les vôtres. Et aussi avant la tienne;) Mais merci quand même. – Dante

0

C'est parce qu'il n'y a pas de Value imbriqué sous Image seulement un autre élément (img). Vous devez faire quelque chose comme:

XElement imgElement = document.Descendants("image").SingleOrDefault().FirstNode; 

accéder ensuite la propriété Value pour obtenir src. Dans le cas contraire, si vous êtes à la recherche de la balise img sous forme de texte vous devez enregistrer dans votre doc XML en tant que section CDATA e..g

<image><![CDATA[<img src="/Images/m1cznk4a6fh7.jpg" />]]></image> 
+0

Thx pour la réponse, était également très utile. Je peux seulement approuver un, mais j'ai aussi voté pour le vôtre. – Dante

+0

@Dante: pas de problème, cependant, j'ai laissé un commentaire sur la réponse que vous avez acceptée. Vous avez dit que vous aviez besoin du contenu HTML complet dans la balise 'image', ce qui vous obligerait à utiliser une section CDATA. Par conséquent, j'aurais pensé que la réponse de mien/@ Nathan aurait été la bonne. – James

+0

Mon mauvais, je ne l'ai pas expliqué correctement. Mais il était le premier et il a répondu à mon problème. – Dante

Questions connexes