Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 寻找一种使用c组织xml流的更好方法_C#_.net_Xml_Xml Serialization - Fatal编程技术网

C# 寻找一种使用c组织xml流的更好方法

C# 寻找一种使用c组织xml流的更好方法,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我有一个通过HttpWebResponse从Web服务返回的xml流。目前,我正在将xml加载到XmlTextReader中,然后通过节点循环获取变量。这是可行的,但非常笨拙,因为某些子节点包含的数据会影响我如何组织之前的数据。据我所知,XmlTextReader是迭代式的,只能向前阅读。因此,如果子节点x包含可能会影响父节点a的数据,那么当我到达子节点x时,我已经阅读了父节点a,整个事情是非常令人头痛的 我对在.net中使用xml比较陌生。。。有没有更好的办法?我想大声想想,我希望能够将入站x

我有一个通过HttpWebResponse从Web服务返回的xml流。目前,我正在将xml加载到XmlTextReader中,然后通过节点循环获取变量。这是可行的,但非常笨拙,因为某些子节点包含的数据会影响我如何组织之前的数据。据我所知,XmlTextReader是迭代式的,只能向前阅读。因此,如果子节点x包含可能会影响父节点a的数据,那么当我到达子节点x时,我已经阅读了父节点a,整个事情是非常令人头痛的

我对在.net中使用xml比较陌生。。。有没有更好的办法?我想大声想想,我希望能够将入站xml流读入一个对象,在这个对象中我可以说:显示所有节点x中的所有内容:然后将它们设置为类。基于它们是什么,好的,我应该告诉我节点a的所有东西。。。。换句话说,不是一种前向阅读方法,而是对整个xml内容的一种自上而下的方法。这可能吗

下面是一些关于我现在如何处理它的示例代码:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
XmlTextReader reader = new XmlTextReader(responseStream);

while (reader.Read())
{
    if (reader.Name == "Whatever")
        {
            var = reader.ReadString();
            reader.Read();
。。。等等,直到xml结束

好了,我想我快到了,我只需要多一点帮助。下面是我的新代码,我正在使用LINQtoXML,它工作正常。我只是有一个关于嵌套数据的问题。我从xml中得到的最后一个元素ProductAlignment实际上有我需要以可读格式解析的子节点。现在,我的代码就是这样,它接受ProductAlignment中的所有子元素,并在将整个内容数据绑定到gridview时将它们混杂在一个单元格中。如何将ProductAlignment中的子元素子查询为更可读的格式

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
XDocument xdoc = XDocument.Load(XmlReader.Create(responseStream));
var People= from Person in xdoc.Descendants("Person")
                          where Person.Element("Role").Value != "Admin"
                          orderby Person.Element("Role").Value
                          select new
                          {
                              Role= Person.Element("TerritoryRole").Value,
                              FirstName = Person.Element("FirstName").Value,
                              LastName = Person.Element("LastName").Value,
                              ProductAlignment = Person.Element("ProductAlignment").Value
                          };

        gvTest.DataSource = People;
        gvTest.DataBind();

您正在寻找。

您可以使用linq to xml和以下内容

使用加载文档 然后,您可以使用XDocument方法访问指定的节点 如果需要,也可以使用XPathSelectElement方法对文档执行旧的xpath查询。
这种方法可以让您以整个文档都在内存中为代价在任何方向上进行遍历…

1是否可以处理流?xml实际上并不作为文档存在,它只是通过响应对象传递的数据。我是否必须将其放入本地xml文档中,然后加载它?或者有没有办法将流直接送入XDocument对象?@optionsix:XDocument.Load接受流。什么是计算机文档,但给定格式的有限流,有人以某种方式冻结了内存、文件并称之为文档?一旦将流加载到XDocument中,它就是一个文档:足够公平:我来试一试。XDocument.load方法是否仅适用于流4.0?我用的是3.5,它不起作用。我想我可能已经找到了解决办法。。。