我理解我们如何使用如下代码示例..
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"));
}
}
}
这将读取“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>
但是,让我们说你的兄弟姐妹并不总是类型书..在内部,我们可以有书,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]。可以这样做吗?谢谢!
答案 0 :(得分: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"));
}
}
}
答案 1 :(得分:1)
尝试以下代码。将适用于两种类型的书籍。我使用了xmlreader和XElement的组合:
这是我的xml
python3.6 -m pip install -U virtualenv
这是代码
<test>
<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>
<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>
</test>
以下是结果