NSoup ElementsTest 使用说明示例

//源自 github 源码示例


 /// <summary>
    /// Tests for ElementList.
    /// </summary>
    /// <!--
    /// Original Author: Jonathan Hedley
    /// Ported to .NET by: Amir Grozki
    /// -->
    [TestClass]
    public class ElementsTest
    {
        public ElementsTest()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test Attributes
        //
        // You can use the following additional Attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void filter()
        {
            string h = "<p>Excl</p><div class=headline><p>Hello</p><p>There</p></div><div class=headline><h1>Headline</h1></div>";
            Document doc = NSoup.NSoupClient.Parse(h);
            Elements els = doc.Select(".headline").Select("p");
            Assert.AreEqual(2, els.Count);
            Assert.AreEqual("Hello", els[0].Text());
            Assert.AreEqual("There", els[1].Text());
        }

        [TestMethod]
        public void Attributes()
        {
            string h = "<p title=foo><p title=bar><p class=foo><p class=bar>";
            Document doc = NSoup.NSoupClient.Parse(h);
            Elements withTitle = doc.Select("p[title]");
            Assert.AreEqual(2, withTitle.Count);
            Assert.IsTrue(withTitle.HasAttr("title"));
            Assert.IsFalse(withTitle.HasAttr("class"));
            Assert.AreEqual("foo", withTitle.Attr("title"));

            withTitle.RemoveAttr("title");
            Assert.AreEqual(2, withTitle.Count); // existing Elements are not reevaluated
            Assert.AreEqual(0, doc.Select("p[title]").Count);

            Elements ps = doc.Select("p").Attr("style", "classy");
            Assert.AreEqual(4, ps.Count);
            Assert.AreEqual("classy", ps.Last.Attr("style"));
            Assert.AreEqual("bar", ps.Last.Attr("class"));
        }

        [TestMethod]
        public void HasAttr()
        {
            Document doc = NSoup.NSoupClient.Parse("<p title=foo><p title=bar><p class=foo><p class=bar>");
            Elements ps = doc.Select("p");
            Assert.IsTrue(ps.HasAttr("class"));
            Assert.IsFalse(ps.HasAttr("style"));
        }

        [TestMethod]
        public void hasAbsAttr()
        {
            Document doc = NSoup.NSoupClient.Parse("<a id=1 href='/foo'>One</a> <a id=2 href='http://jsoup.org'>Two</a>");
            Elements one = doc.Select("#1");
            Elements two = doc.Select("#2");
            Elements both = doc.Select("a");
            Assert.IsFalse(one.HasAttr("abs:href"));
            Assert.IsTrue(two.HasAttr("abs:href"));
            Assert.IsTrue(both.HasAttr("abs:href")); // hits on #2
        }

        [TestMethod]
        public void Attr()
        {
            Document doc = NSoup.NSoupClient.Parse("<p title=foo><p title=bar><p class=foo><p class=bar>");
            string classVal = doc.Select("p").Attr("class");
            Assert.AreEqual("foo", classVal);
        }

        [TestMethod]
        public void absAttr()
        {
            Document doc = NSoup.NSoupClient.Parse("<a id=1 href='/foo'>One</a> <a id=2 href='http://jsoup.org'>Two</a>");
            Elements one = doc.Select("#1");
            Elements two = doc.Select("#2");
            Elements both = doc.Select("a");

            Assert.AreEqual("", one.Attr("abs:href"));
            Assert.AreEqual("http://jsoup.org/", two.Attr("abs:href"));
            Assert.AreEqual("http://jsoup.org/", both.Attr("abs:href"));
        }

        [TestMethod]
        public void classes()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p class='mellow yellow'></p><p class='red green'></p>");

            Elements els = doc.Select("p");
            Assert.IsTrue(els.HasClass("red"));
            Assert.IsFalse(els.HasClass("blue"));
            els.AddClass("blue");
            els.RemoveClass("yellow");
            els.ToggleClass("mellow");

            Assert.AreEqual("blue", els[0].ClassName());
            Assert.AreEqual("red green blue mellow", els[1].ClassName());
        }

        [TestMethod]
        public void text()
        {
            string h = "<div><p>Hello<p>there<p>world</div>";
            Document doc = NSoup.NSoupClient.Parse(h);
            Assert.AreEqual("Hello there world", doc.Select("div > *").Text);
        }

        [TestMethod]
        public void hasText()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><div><p></p></div>");
            Elements divs = doc.Select("div");
            Assert.IsTrue(divs.HasText);
            Assert.IsFalse(doc.Select("div + div").HasText);
        }

        [TestMethod]
        public void html()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><div><p>There</p></div>");
            Elements divs = doc.Select("div");
            Assert.AreEqual("<p>Hello</p>\n<p>There</p>", divs.Html());
        }

        [TestMethod]
        public void outerHtml()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><div><p>There</p></div>");
            Elements divs = doc.Select("div");
            Assert.AreEqual("<div><p>Hello</p></div><div><p>There</p></div>", TextUtil.StripNewLines(divs.OuterHtml()));
        }

        [TestMethod]
        public void setHtml()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>One</p><p>Two</p><p>Three</p>");
            Elements ps = doc.Select("p");

            ps.Prepend("<b>Bold</b>").Append("<i>Ital</i>");
            Assert.AreEqual("<p><b>Bold</b>Two<i>Ital</i></p>", TextUtil.StripNewLines(ps[1].OuterHtml()));

            ps.Html("<span>Gone</span>");
            Assert.AreEqual("<p><span>Gone</span></p>", TextUtil.StripNewLines(ps[1].OuterHtml()));
        }

        [TestMethod]
        public void val()
        {
            Document doc = NSoup.NSoupClient.Parse("<input value='one' /><textarea>two</textarea>");
            Elements els = doc.Select("input, textarea");
            Assert.AreEqual(2, els.Count);
            Assert.AreEqual("one", els.Val());
            Assert.AreEqual("two", els.Last.Val());

            els.Val("three");
            Assert.AreEqual("three", els.First.Val());
            Assert.AreEqual("three", els.Last.Val());
            Assert.AreEqual("<textarea>three</textarea>", els.Last.OuterHtml());
        }

        [TestMethod]
        public void before()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>This <a>is</a> <a>jsoup</a>.</p>");
            doc.Select("a").Before("<span>foo</span>");
            Assert.AreEqual("<p>This <span>foo</span><a>is</a> <span>foo</span><a>jsoup</a>.</p>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void after()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>This <a>is</a> <a>jsoup</a>.</p>");
            doc.Select("a").after("<span>foo</span>");
            Assert.AreEqual("<p>This <a>is</a><span>foo</span> <a>jsoup</a><span>foo</span>.</p>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void wrap()
        {
            string h = "<p><b>This</b> is <b>jsoup</b></p>";
            Document doc = NSoup.NSoupClient.Parse(h);
            doc.Select("b").Wrap("<i></i>");
            Assert.AreEqual("<p><i><b>This</b></i> is <i><b>jsoup</b></i></p>", doc.Body.Html());
        }

        [TestMethod]
        public void wrapDiv()
        {
            string h = "<p><b>This</b> is <b>jsoup</b>.</p> <p>How do you like it?</p>";
            Document doc = NSoupClient.Parse(h);
            doc.Select("p").Wrap("<div></div>");
            Assert.AreEqual("<div><p><b>This</b> is <b>jsoup</b>.</p></div> <div><p>How do you like it?</p></div>",
                    TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void unwrap()
        {
            string h = "<div><font>One</font> <font><a href=\"/\">Two</a></font></div";
            Document doc = NSoup.NSoupClient.Parse(h);
            doc.Select("font").Unwrap();
            Assert.AreEqual("<div>One <a href=\"/\">Two</a></div>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void unwrapP()
        {
            string h = "<p><a>One</a> Two</p> Three <i>Four</i> <p>Fix <i>Six</i></p>";
            Document doc = NSoupClient.Parse(h);
            doc.Select("p").Unwrap();
            Assert.AreEqual("<a>One</a> Two Three <i>Four</i> Fix <i>Six</i>", TextUtil.StripNewLines(doc.Body.Html()));
        }

        [TestMethod]
        public void empty()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello <b>there</b></p> <p>now!</p></div>");
            doc.OutputSettings().PrettyPrint(false);

            doc.Select("p").Empty();
            Assert.AreEqual("<div><p></p> <p></p></div>", doc.Body.Html());
        }

        [TestMethod]
        public void remove()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello <b>there</b></p> jsoup <p>now!</p></div>");
            doc.OutputSettings().PrettyPrint(false);

            doc.Select("p").Remove();
            Assert.AreEqual("<div> jsoup </div>", doc.Body.Html());
        }

        [TestMethod]
        public void eq()
        {
            string h = "<p>Hello<p>there<p>world";
            Document doc = NSoup.NSoupClient.Parse(h);
            Assert.AreEqual("there", doc.Select("p").Eq(1).Text);
            Assert.AreEqual("there", doc.Select("p")[1].Text());
        }

        [TestMethod]
        public void Is()
        {
            string h = "<p>Hello<p title=foo>there<p>world";
            Document doc = NSoup.NSoupClient.Parse(h);
            Elements ps = doc.Select("p");
            Assert.IsTrue(ps.Is("[title=foo]"));
            Assert.IsFalse(ps.Is("[title=bar]"));
        }

        [TestMethod]
        public void parents()
        {
            Document doc = NSoup.NSoupClient.Parse("<div><p>Hello</p></div><p>There</p>");
            Elements parents = doc.Select("p").Parents;

            Assert.AreEqual(3, parents.Count);
            Assert.AreEqual("div", parents[0].TagName());
            Assert.AreEqual("body", parents[1].TagName());
            Assert.AreEqual("html", parents[2].TagName());
        }

        [TestMethod]
        public void not()
        {
            Document doc = NSoup.NSoupClient.Parse("<div id=1><p>One</p></div> <div id=2><p><span>Two</span></p></div>");

            Elements div1 = doc.Select("div").Not(":has(p > span)");
            Assert.AreEqual(1, div1.Count);
            Assert.AreEqual("1", div1.First.Id);

            Elements div2 = doc.Select("div").Not("#1");
            Assert.AreEqual(1, div2.Count);
            Assert.AreEqual("2", div2.First.Id);
        }

        [TestMethod]
        public void tagNameSet()
        {
            Document doc = NSoup.NSoupClient.Parse("<p>Hello <i>there</i> <i>now</i></p>");
            doc.Select("i").TagName("em");

            Assert.AreEqual("<p>Hello <em>there</em> <em>now</em></p>", doc.Body.Html());
        }

        [TestMethod]
        public void traverse()
        {
            Document doc = NSoupClient.Parse("<div><p>Hello</p></div><div>There</div>");
            StringBuilder accum = new StringBuilder();
            doc.Select("div").Traverse(new TestNodeVisitor(accum));
            Assert.AreEqual("<div><p><#text></#text></p></div><div><#text></#text></div>", accum.ToString());
        }

        private class TestNodeVisitor : NodeVisitor
        {
            StringBuilder accum;

            public TestNodeVisitor(StringBuilder accum)
            {
                this.accum = accum;
            }

            public void Head(Node node, int depth)
            {
                accum.Append("<" + node.NodeName + ">");
            }

            public void Tail(Node node, int depth)
            {
                accum.Append("</" + node.NodeName + ">");
            }
        }
    }

 

在IT领域,尤其是地理信息系统(GIS)中,坐标转换是一项关键技术。本文将深入探讨百度坐标系、火星坐标系和WGS84坐标系之间的相互转换,并介绍如何使用相关工具进行批量转换。 首先,我们需要了解这三种坐标系的基本概念。WGS84坐标系,即“World Geodetic System 1984”,是一种全球通用的地球坐标系统,广泛应用于GPS定位和地图服务。它以地球椭球模型为基础,以地球质心为原点,是国际航空和航海的主要参考坐标系。百度坐标系(BD-09)是百度地图使用的坐标系。为了保护隐私和安全,百度对WGS84坐标进行了偏移处理,导致其与WGS84坐标存在差异。火星坐标系(GCJ-02)是中国国家测绘局采用的坐标系,同样对WGS84坐标进行了加密处理,以防止未经授权的精确位置获取。 坐标转换的目的是确保不同坐标系下的地理位置数据能够准确对应。在GIS应用中,通常通过特定的算法实现转换,如双线性内插法或四参数转换法。一些“坐标转换小工具”可以批量转换百度坐标、火星坐标与WGS84坐标。这些工具可能包含样本文件(如org_xy_格式参考.csv),用于提供原始坐标数据,其中包含需要转换的经纬度信息。此外,工具通常会附带使用指南(如重要说明用前必读.txt和readme.txt),说明输入数据格式、转换步骤及可能的精度问题等。x86和x64目录则可能包含适用于32位和64位操作系统的软件或库文件。 在使用这些工具时,用户需要注意以下几点:确保输入的坐标数据准确无误,包括经纬度顺序和浮点数精度;按照工具要求正确组织数据,遵循读写规则;注意转换精度,不同的转换方法可能会产生微小误差;在批量转换时,检查每个坐标是否成功转换,避免个别错误数据影响整体结果。 坐标转换是GIS领域的基础操作,对于地图服务、导航系统和地理数据分析等至关重要。理解不同坐标系的特点和转换方法,有助于我们更好地处
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值