【问题标题】:Why does XmlReader.ReadInnerXmlAsync hang when reading <ns:element>?为什么 XmlReader.ReadInnerXmlAsync 在读取 <ns:element> 时会挂起?
【发布时间】:2013-08-17 20:58:42
【问题描述】:

我遇到了 XmlReader.ReadInnerXmlAsync() 方法的奇怪行为。虽然以下代码有效...

using (XmlReader r = XmlReader.Create(stream, new XmlReaderSettings() { Async = true }))
{                    
    while (await r.ReadAsync())
    {
        switch (r.NodeType) {                            
            case XmlNodeType.Element:
                if (r.Name.Equals("c"))
                {
                    string x = await r.ReadInnerXmlAsync();
                    OnReceive("[ " + x + " ]");
                }                                                                
                break;                            
        }
    }
}

...并且来自以下 XML 的整个元素 &lt;c&gt;&lt;/c&gt; 被读取为字符串。

<?xml version='1.0' encoding='UTF-8'?>
<namespace:open>
    <namespace:a>
        <b></b>
        <c>
            <d>TEXT01</d>
            <d>TEXT01</d>
            <d>TEXT01</d>
            <d>TEXT01</d>
        </c>
        <e>
            <f>TEST01</f>
        </e>
        <g/>
        <h/>
    </namespace:a>
...

我无法使用相同的代码 (r.Name.Equals("namespace:a")) 读取 &lt;namespace:a&gt;。为什么?代码只是在字符串x = await r.ReadInnerXmlAsync(); 处阻塞,我确信数据会在几秒钟内到达。

是不是因为“如果reader位于叶子节点,调用ReadInnerXml就相当于调用Read”。 (在发送更多数据之前会阻塞)在http://msdn.microsoft.com/de-de/library/system.xml.xmlreader.readinnerxml.aspx 中记录?我该如何解决这个问题?

如何在无需等待更多 XML 数据的情况下读取内部或外部 XML?

更新:

我找到了一个解决方案。

XmlDocument doc = new XmlDocument();
doc.Load(r.ReadSubtree());
doc.DocumentElement.OuterXml;

也许有人会提供更优雅的东西。

【问题讨论】:

  • 你怎么称呼这段代码?你用Wait()还是Result
  • 您缺少命名空间声明。

标签: c# xml-parsing async-await c#-5.0


【解决方案1】:

我找到了一个解决方案。

XmlDocument doc = new XmlDocument();
doc.Load(r.ReadSubtree());
doc.DocumentElement.OuterXml;

也许有人会提供更优雅的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2012-02-17
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    相关资源
    最近更新 更多