gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:58:41 25 4
gpt4 key购买 nike

我有一个 xml 流从通过 HttpWebResponse 传入的 Web 服务返回。目前我正在将 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 结束。

好的,我想我快完成了,我只需要多一点帮助。下面是我的新代码,我正在使用 Linq to XML,它工作正常。我只是有一个关于嵌套数据的问题。我从 xml 中得到的最后一个元素“ProductAlignment”实际上有我需要以可读格式解析的子节点。所以现在,按照我的代码原样,它采用 ProductAlignment 中的所有子元素,并在我将整个元素数据绑定(bind)到 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...

  1. 使用XDocument.Load method加载文档
  2. 然后您可以使用 XDocument 方法到达指定的节点 here
  3. 或者如果需要,您也可以使用 XPathSelectElement 方法对文档执行旧的 xpath 查询。

这种方法可以让您以整个文档都在内存中为代价向任何方向遍历...

关于c# - 寻找一种更好的方法来使用 c# 组织 xml 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com