internal static void GenerateXPath()
        {
            XDocument aspNetRss = XDocument.Load("https://weblogs.asp.net/dixin/rss");
            XElement  element1  = aspNetRss
                                  .Root
                                  .Element("channel")
                                  .Elements("item")
                                  .Last();

            element1.XPath().WriteLine(); // /rss/channel/item[20]
            XElement element2 = aspNetRss.XPathSelectElement(element1.XPath());

            object.ReferenceEquals(element1, element2).WriteLine(); // True

            XDocument  flickrRss  = XDocument.Load("https://www.flickr.com/services/feeds/photos_public.gne?id=64715861@N07&format=rss2");
            XAttribute attribute1 = flickrRss
                                    .Root
                                    .Descendants("author")                               // <author flickr:profile="https://www.flickr.com/people/dixin/">...</author>.
                                    .First()
                                    .Attribute(XName.Get("profile", "urn:flickr:user")); // <rss xmlns:flickr="urn:flickr:user">...</rss>.

            attribute1.XPath().WriteLine();                                              // /rss/channel/item[1]/author/@flickr:profile
            XAttribute attribute2 = ((IEnumerable <object>)flickrRss
                                     .XPathEvaluate(attribute1.XPath(), flickrRss.CreateNamespaceManager()))
                                    .Cast <XAttribute>()
                                    .Single();

            object.ReferenceEquals(attribute1, attribute2).WriteLine(); // True
        }
        internal static void XPathQueryWithNamespace()
        {
            XDocument              rss = XDocument.Load("https://www.flickr.com/services/feeds/photos_public.gne?id=64715861@N07&format=rss2");
            XmlNamespaceManager    namespaceManager = rss.CreateNamespaceManager();
            IEnumerable <XElement> query1           = rss.XPathSelectElements("/rss/channel/item/media:category", namespaceManager);

            query1.Count().WriteLine(); // 20

            IEnumerable <XElement> query2 = rss.XPathSelectElements("/rss/channel/item/media:category");
            // XPathException: Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.
        }
        internal static void XPathEvaluateSequenceWithNamespace()
        {
            XDocument rss = XDocument.Load("https://www.flickr.com/services/feeds/photos_public.gne?id=64715861@N07&format=rss2");

            ((IEnumerable <object>)rss
             .XPathEvaluate(
                 "/rss/channel/item[contains(media:category/text(), 'microsoft')]/media:title/text()",
                 rss.CreateNamespaceManager()))
            .Cast <XText>()
            .WriteLines(mediaTitle => mediaTitle.Value);
            // Chinese President visits Microsoft
            // Satya Nadella, CEO of Microsoft
        }
Ejemplo n.º 4
0
 public static XmlNamespaceManager CreateNamespaceManager(this XDocument document, Dictionary <string, string> namespaces = null)
 {
     return(document.CreateNamespaceManager(null, namespaces));
 }