XmlReader的 - 问题读取XML文件,而没有换行 [英] XmlReader - problem reading xml file with no newlines

查看:454
本文介绍了XmlReader的 - 问题读取XML文件,而没有换行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用的XmlReader解析XML文件,我得到不同的结果,根据XML文件是否是正确的格式(即与新行)还是不行。

这是在code我使用:

  XmlReader的读者= XmlTextReader的新(XMLFILE);
reader.MoveToContent();
而(reader.Read())
{
    开关(reader.NodeType)
    {
        案例XmlNodeType.Element:
            如果(reader.Name ==条目)
            {
                Console.WriteLine(reader.ReadElementContentAsString());
            }
            打破;
    }
}
 

和我一直在使用XML的内容:

<$p$p><$c$c><xport><meta><columns>5</columns><legend><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_total_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_free_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_memory_usage_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_free_memory_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_live_memory_kib</entry></legend></meta></xport>

在code打印出只有3条线路,当它真的应该打印5.我想我失去了一些东西,但它没有任何意义,我认为同样的code会产生不同的结果就当我没有白空间在同一个XML文件中。

解决方案

请参阅<一href="http://stackoverflow.com/questions/2299632/why-does-xmlreader-skip-every-other-element-if-there-is-no-whitespace-separator">Why确实的XmlReader跳过所有其他元素,如果没有空格分隔符?

  

您所呼叫[ ReadElementContentAsString ],这将消耗该元素,将光标只是下一个元素之前。你然后再调用read,它可以移动光标(例如以文本节点的元素中)。

修改环路(几乎完全一样,在其他问题):

 而(!reader.EOF)
{
    如果(reader.NodeType == XmlNodeType.Element和放大器;&安培; reader.Name ==项)
    {
        Console.WriteLine(reader.ReadElementContentAsString());
    }
    其他
    {
        reader.Read();
    }
}
 

When I use XmlReader to parse an XML file, I get different results depending on whether the XML file is properly formatted (i.e. with newlines) or not.

This is the code I'm using:

XmlReader reader = new XmlTextReader(xmlfile);
reader.MoveToContent();
while (reader.Read())
{
    switch (reader.NodeType)
    {
        case XmlNodeType.Element:
            if (reader.Name == "entry")
            {
                Console.WriteLine(reader.ReadElementContentAsString());
            }
            break;
    }
}

And the XML content I've been using is:

<xport><meta><columns>5</columns><legend><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_total_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_free_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_memory_usage_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_free_memory_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_live_memory_kib</entry></legend></meta></xport>

The code prints out only 3 lines, when it really should be printing 5. I guess I'm missing something, but it doesn't make sense to me that the same code would produce different results on the same XML file when I don't have white-spaces.

解决方案

See Why does XmlReader skip every other element if there is no whitespace separator?

You're calling [ReadElementContentAsString], which will consume the element and place the "cursor" just before the next element. You're then calling Read again, which moves the cursor on (e.g. to the text node within the element).

Modified loop (almost exactly like in the other question):

while (!reader.EOF)
{
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "entry")
    {
        Console.WriteLine(reader.ReadElementContentAsString());
    }
    else
    {
        reader.Read();
    }
}

这篇关于XmlReader的 - 问题读取XML文件,而没有换行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆