gpt4 book ai didi

c# - XMLReader 读取到未知类型的下一个兄弟

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:23 28 4
gpt4 key购买 nike

我了解我们如何使用如下代码示例..

public class Sample
{
public static void Main()
{
using (XmlReader reader = XmlReader.Create("books.xml"))
{
reader.ReadToFollowing("book");
do
{
Console.WriteLine("Name ", reader.GetAttribute("Name"));
} while (reader.ReadToNextSibling("book"));
}
}
}

这将读取“书”类型的每个兄弟。所以在像下面这样的 xml 结构中它会工作得很好..

<Section>
<book Name="Titan Quest 1"/>
<book Name="Titan Quest 2"/>
<book Name="Adventure Willy"/>
<book Name="Mr. G and the Sandman"/>
<book Name="Terry and Me"/>
</Section>

但是假设你的 sibling 并不总是书的类型。在部分内部,我们可以有书、cd、dvd 或 vhs,所以 xml 可能看起来像这样

<Section>
<cd Name="Titan Quest 1"/>
<book Name="Titan Quest 2"/>
<vhs Name="Adventure Willy"/>
<cd Name="Mr. G and the Sandman"/>
<dvd Name="Terry and Me"/>
</Section>

我想写一个方法,无论它是什么兄弟类型,它都会给我 Name 属性。使用上面的代码我只会得到 [Titan Quest 2]。这可以做到吗?谢谢!

最佳答案

将此代码与 XDocument 一起使用将从属性中获取所有值:

 var document = XDocument.Load("test.xml");

var bookValues = document.XPathSelectElement("Section")
.Descendants()
.Select(x => x.Attribute("Name").Value);

或者使用XmlReader获取所有的属性值:

List<String> values = new List<string>();
using (var xmlreader = XmlReader.Create("test.xml"))
{
xmlreader.ReadToDescendant("Section");
while (xmlreader.Read())
{
if (xmlreader.IsStartElement())
{
values.Add(xmlreader.GetAttribute("Name"));
}
}
}

关于c# - XMLReader 读取到未知类型的下一个兄弟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50239624/

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