如何在从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部分?
这在ReadInnerXmlAsync
中可能是可行的。
switch (r.NodeType) {
case XmlNodeType.Element:
if (r.Name.Equals("a"))
{
string x = await r.ReadInnerXmlAsync();
OnReceive(x);
}
break;
}