如何在从NetworkStream获取数据时读取完整的XML元素及其子元素

本文关键字:元素 XML 读取 NetworkStream 获取 数据 | 更新日期: 2023-09-27 18:27:49

到目前为止,我拥有的代码如下所示。

using (XmlReader r = XmlReader.Create(stream, new XmlReaderSettings() { Async = true }))
{                    
    while (await r.ReadAsync())
    {
        switch (r.NodeType) {
            case XmlNodeType.Element:
                if (r.IsEmptyElement) // no attributes
                {
                    OnReceive("<" + r.Name + " />");
                }
                else // has attributes
                {
                    OnReceive("<" + r.Name + ">");
                    while (r.MoveToNextAttribute())
                    {
                        OnReceive(r.Name + " -> " + r.Value);
                    }
                }                                
                break;
        }
    }
}

我的XML如下所示。

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

一旦我命中XML元素<a>,我就想把它读到最后(直到我命中</a>),然后激发一个包含整个元素及其子元素的事件。

我该怎么做?是否有某种机制可以让我像那样读取流(等到元素结束),然后继续使用其他XML部分?

如何在从NetworkStream获取数据时读取完整的XML元素及其子元素

这在ReadInnerXmlAsync中可能是可行的。

switch (r.NodeType) {
                            case XmlNodeType.Element:
                                if (r.Name.Equals("a"))
                                {
                                    string x = await r.ReadInnerXmlAsync();
                                    OnReceive(x);
                                }                               
                                break;
                        }
相关文章: