2017-07-14 1 views
0

Je lis flux multiples de nombreuses sources avec C# console, et j'ai ce code où je charge XML à partir de sources:Comment obtenir url enceinte avec XElement C# Console

XmlDocument doc = new XmlDocument(); 
doc.Load(sourceURLX); 
XElement xdoc = XElement.Load(sourceURLX); 

Comment obtenir url enceinte et spectacle comme variable?

+1

Pourriez-vous clarifier la question? Que voulez-vous dire par "enclosure url"? Le cas échéant, un échantillon de votre XML pourrait également être utile à inclure dans la question. –

+0

Je suis en train de lire les flux, puis je prends des valeurs et les mets dans la base de données sous forme de chaînes, maintenant j'ai besoin de lire l'image de l'article pour mettre l'URL à l'image dans le tableau. Parce qu'avec la console, j'ai lu les flux et ajouté dans la base de données en tant que chaînes. Titre, Description, URL de l'article et Image de l'article. Maintenant, mon problème est juste de prendre l'URL de la balise enclosure comme une chaîne, maby comme SElement est possible ou quelque chose d'autre idée. Maby maintenant vous pouvez clairement comprendre mon problème –

+0

'xDoc.Element (" item "). Element (" enclosure "). Attribut (" url "). Value' – Fabio

Répondre

0

Si je comprends bien votre question (je fais une grande supposition ici) - vous voulez sélectionner un attribut de la balise racine (ou 'englobant'), appelé 'url'?

Vous pouvez utiliser les requêtes XPath ici. Considérez le code XML suivant:

<?xml version="1.0" encoding="utf-8"?> 
<root url='google.com'> 
    <inner /> 
</root> 

Vous pouvez utiliser le code suivant pour récupérer 'google.com':

String query = "/root[1]/@url"; 
XmlDocument doc = new XmlDocument(); 
doc.Load(sourceURLX); 
String value = doc.SelectSingleNode(query).InnerText; 

Pour plus d'informations sur la syntaxe XPath se trouve here.

Modifier: Comme vous l'avez dit dans votre commentaire, vous travaillez avec le code XML suivant:

<item> 
    <description> 
    </description> 
    <enclosure url="blablabla.com/img.jpg" /> 
</item> 

Par conséquent, vous pouvez récupérer l'URL en utilisant la requête XPath suivante:

/item[1]/enclosure[1]/@url 
+0

_Je fais une grosse supposition ici_ - pourquoi ne pas demander à OP de clarifier avant?;) – Fabio

+0

Je vais supprimer la réponse si ce n'est pas approprié :) –

+0

Merci, je suis nouveau dans la programmation, et mon anglais n'est pas si bon. Mais merci. J'essaye avec votre réponse mais pas les étiquettes comme dans XML Feeds qui ont l'enclosure, parce que les étiquettes d'enclosure incluent la balise d'article comme ceci etc

0

Avec XML comme ci-dessous

<?xml version="1.0" encoding="UTF-8"?> 
    <rss version="2.0"> 
     <channel> 
      <title>title</title> 
      <link>https://www.link.com</link> 
      <description>description</description> 
      <item> 
       <title>RSS</title> 
       <link>https://www.link.com/xml/xml_rss.asp</link> 
       <description>description</description> 
       <enclosure url="https://www.link.com/media/test.wmv" 
          length="10000" 
          type="video/wmv"/> 
      </item> 
     </channel> 
    </rss> 

Vous obtiendrez url en lisant l'attribut

var document = XDocument.Load(sourceURLX); 
var url = document.Root 
        .Element("channel") 
        .Element("item") 
        .Element("enclosure") 
        .Attribute("url") 
        .Value; 

Pour obtenir plusieurs urls

var urls = document.Descendants("item") 
        .Select(item => item.Element("enclosure").Attribute("url").Value) 
        .ToList(); 

En utilisant foreach boucle

foreach (var item in document.Descendants("item")) 
{ 
    var title = item.Element("title").Value; 
    var link = item.Element("link").Value; 
    var description = item.Element("description").Value; 
    var url = item.Element("enclosure").Attribute("url").Value; 
    // save values to database 
} 
+0

? j'obtiens cette erreur: 'Erreur \t CS1061 \t 'XmlDocument' ne contient pas de définition pour 'Root' et aucune méthode d'extension 'Root' acceptant un premier argument de type 'XmlDocument' n'a été trouvée (il manque une directive using ou une référence d'assemblage?) ' –

+0

Oui cela fonctionnera. Utilisez 'var document = XDocument.Load (sourceURLX)' – Fabio

+0

Cela fonctionne, mais pour les 10 articles, je reçois la même image, à partir du premier article, je reçois 10 fois seulement la première image. –