gpt4 book ai didi

获取xml元素的c#代码

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

我有以下 xml 文件:

<os:tax>
<os:cat name="abc" id="1">
<os:subcat name="bcd" id="11">
<os:t name="def" id="111">
<os:cut name="hello" id="161" cutURL="/abc/a.html"/>
<os:cut name="hello2" id="162" cutURL="/abc1/a1.html"/>
<os:cut name="hello3" id="163" cutURL="/abc4/a3.html"/>
</os:t>
</os:subcat>
</os:cat>
<os:cat name="def" id="2">
<os:subcat name="bcd" id="22">
<os:t name="def" id="222">
<os:cut name="hello" id="171" cutURL="/abcs/a.html"/>
<os:cut name="hello2" id="172" cutURL="/abcs1/a1.html"/>
<os:cut name="hello3" id="173" cutURL="/abcs4/a3.html"/>
</os:t>
</os:subcat>
</os:cat>
</os:tax>

它是一个更大的文件,下面有很多 os:cat。我需要获取字符串值:os:cat -> id , 名称os:subcat -> id, 名称操作系统:t -> id,名称os: cut -> id, name, cutURL

到目前为止我有这个:

XmlNodeList tax = xmlDoc.GetElementsByTagName("os:tax");
foreach (XmlNode node in tax)
{
XmlElement cat = (XmlElement)node;
// than get string values here?
}

这是正确的吗?任何人都可以告诉我这样做的有效方法吗?还是轻松做到这一点的正确方法?

最佳答案

这是 LINQ to XML 的示例 - 但我强烈建议您查找完整的 LINQ to XML 教程。 (并掌握 LINQ 的其余部分...)

(编辑:我之前没有发现 t 部分。)

XDocument doc = XDocument.Load("tax.xml");
XNamespace os = "http://something"; // You haven't included the declaration...

foreach (XElement cat in doc.Descendants(os + "cat"))
{
int catId = (int) cat.Attribute("id");
string catName = (string) cat.Attribute("name");

foreach (XElement subcat in cat.Elements(os + "subcat"))
{
int subId = (int) subcat.Attribute("id");
string subName = (string) subcat.Attribute("name");

foreach (XElement t in subcat.Elements(os + "t"))
{
int tId = (int) t.Attribute("id");
string tName = (string) t.Attribute("name");
foreach (XElement cut in t.Elements(os + "cut"))
{
string cutId = (int) cut.Attribute("id");
string cutName = (string) cut.Attribute("name");
string cutUrl = (string) cut.Attribute("cutURL");
// Use the variables here
}
}
}
}

这假设每只猫只有一个子猫——我不知道这是否正确。

可能想将其表达为 LINQ 查询...这取决于您需要做什么。

这是一个 LINQ 查询版本 - 查看了您正在使用的所有内容后,我认为这更有意义:

XDocument doc = XDocument.Load("tax.xml");
XNamespace os = "http://something"; // You haven't included the declaration...

var query = from cat in doc.Descendants(os + "cat")
from subcat in cat.Elements(os + "subcat")
from t in subcat.Elements(os + "t")
from cut in t.Elements(os + "cut")
select new
{
CatId = (int) cat.Attribute("id"),
CatName = (string) cat.Attribute("name"),
SubCatId = (int) subcat.Attribute("id"),
SubCatName = (string) subcat.Attribute("name"),
TId = (int) t.Attribute("id"),
TName = (string) t.Attribute("name"),
CutId = (int) cut.Attribute("id")
CutName = (string) cut.Attribute("name")
CutUrl = (string) cut.Attribute("cutURL")
};

请注意,我已将所有 ID 值转换为 int 而不是 string。当然,您可以将它们转换为字符串,但如果它们都是都是整数,那么这样解析它们是有意义的。

关于获取xml元素的c#代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187589/

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