gpt4 book ai didi

c# - 使用 LINQ 查询 XML 文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:33 25 4
gpt4 key购买 nike

我有一个要使用 LINQ 查询的 XML 文件。我想为每条记录创建一个新行。这是我迄今为止尝试过但失败的方法。

<?xml version="1.0" encoding="utf-8"?>
<categories xmlns="urn:schemas-pi-meta:categories" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:schemas-pi-meta:categories Xsd/meta.xml.config.xsd">
<category name="history">
<data>
<value name="customer">2</value>
<value name="truck">1</value>
</data>
<category name="record">
<data>
<value name="time">1/3/2013 2:22:41 PM</value>
<value name="quantity">3</value>
<value name="unit">barrels</value>
<value name="cancelled">false</value>
<value name="errored">false</value>
</data>
</category>
</category>

该文件较长,因此我已将其删除,但它会重复。

这是我试图做的:
 XElement root = XElement.Load("D:\\Linq XM\\history.xml.config");

IEnumerable<XElement> address = from el in root.Elements("categories")
where (string)el.Attribute("category") == "record"
select el;

我试图改变 Elements 的值(value),认为我可能遗漏了一些东西,但不知何故,查询没有返回我的数据。

最佳答案

据我所知,有四个问题。

第一个问题是您正在寻找 categories根元素下的元素 - 当 categories element 是根元素。我怀疑你真的想找 category元素而不是 categories元素。

第二个问题是你试图找到一个名为 category 的属性。 .在我看来,您应该检查名为 name 的属性。在称为 category 的元素内.

第三个问题是带有 name 的类别。 record 的属性实际上不是 categories 的直接子元素根本 - 它是一个后代,但不是一个直接的 child - 所以你应该使用 Descendants而不是 Elements .

第四个问题是您没有指定命名空间。文件的这一部分:

<categories xmlns="urn:schemas-pi-meta:categories"  ...

指定此元素和后代的默认命名空间是 URI "urn:schemas-pi-meta:categories" .因此,当您说出您要查找的内容时,您需要指定这一点。

把这些放在一起,你会得到:
XNamespace ns = "urn:schemas-pi-meta:categories";
var query = from el in root.Descendants(ns + "category")
where (string) el.Attribute("name") == "record"
select el;

或者没有查询表达式(因为它比这里的值(value)更麻烦):
XNamespace ns = "urn:schemas-pi-meta:categories";
var query = root.Descendants(ns + "category")
.Where(el => (string) el.Attribute("name") == "record");

关于c# - 使用 LINQ 查询 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178738/

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