zoukankan      html  css  js  c++  java
  • XmlTextReader需要注意的问题

    对于xml:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <Pkboy kind="site">
      <command name="price" object="game" password="asdfasdf">
        <game name="魔兽世界">
          <server name="魔兽服务器一号">
            <item name="金币" kind="gold" quantity="12" gross="0.5005" maxdollar="99" mindollar="88" rate="6.88" />
          </server>
        </game>
      </command>
    </Pkboy>

    使用XmlTextReader进行读取:

                byte[] buffer = Encoding.UTF8.GetBytes(xml);
                using (stream = new MemoryStream(buffer))
                {
                    using (XmlTextReader str = new XmlTextReader(stream))
                    {
                        str.Read();

                        str.Read();
                        str.Read();
                        Assert.AreEqual("Pkboy", str.Name);
                        str.Read();
                        str.Read();
                        Assert.AreEqual("command", str.Name);
                        str.Read();
                        str.Read();
                        Assert.AreEqual("game", str.Name);
                        str.MoveToFirstAttribute();
                        Assert.AreEqual("魔兽世界", str.Value);
                        str.Read();
                        str.Read();
                        str.MoveToFirstAttribute();
                        Assert.AreEqual("魔兽服务器一号", str.Value);
                    }
                }

    上面的测试是正常的,也就是说3次Read()以后到了Pkboy节点。为什么呢?

    经过追踪,第一次Read()以后,到了

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>,显示节点的名称是xml,也就是把<>内的东西当成

    一个节点。 而version等都是属性,要是取这些属性,必须用MoveToFirstAttribute类似的一组方法。这里不取,再次Read(),

    然后就到了文档的"\r\n",也就是第二个Read()包含的东西是"\r\n",如果存在回车换行,那么就会被当成一个节点Read()一次。

    如果不包含"\r\n",那么就直接可以到达下一个节点。

    所以,这里因为包含了回车换行,所以,3次以后到达第一个元素Pkboy。

  • 相关阅读:
    tcpdump抓localhost 127.0.0.1的包
    fatal: write failure on 'stdout': Bad file descriptor
    rst转html
    Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc000000d/87) (VERR_NEM_VM_CREATE_FAILED)
    error: 'readdir_r' is deprecated [-Werror=deprecated-declarations]
    ubuntu虚拟机设置共享后无权限
    VirtualBox怎么设置从u盘启动,虚拟机从U盘启动
    File类总结
    相对路径的写法
    systeminfo总结
  • 原文地址:https://www.cnblogs.com/worldreason/p/1256290.html
Copyright © 2011-2022 走看看