如何检查XML值是否存在
本文关键字:XML 是否 存在 检查 何检查 | 更新日期: 2023-09-27 18:24:10
我正在尝试从XML获取数据。我所知道的是,当我试图找到的动物不在XML数据中时,我总是会出错。如图所示的示例。
这是存储在XML:中的数据
<?xml version="1.0" encoding="utf-8" ?>
<Root>
<Animal value="Elephant" size="2" name="Bob">
<Action age="1" size="1">I am small</Action>
<Action age="2" size="1">I am growing up</Action>
<Action age="3" size="1">I'm 3 years old</Action>
<Action age="4" size="1">I'm BIG</Action>
</Animal>
</Root>
这是C#编码的一部分:
XmlDocument xDoc = new XmlDocument();
xDoc.Load("animals.xml");
string animal = "Elephant";
MessageBox.Show(Convert.ToString(xDoc.SelectSingleNode("/Root/Animal[@value='" + animal + "']")
.Attributes["name"].InnerText));
当我更改时发生错误
string animal = "Tiger";
如果数据不存在,我该如何解决错误?
您可以使用Linq到Xml来获取动物的名称(如果没有找到动物,它将返回null
):
XDocument xdoc = XDocument.Load("animals.xml");
string animal = "Elephant";
var name = xdoc.Root.Elements()
.Where(a => (string)a.Attribute("value") == animal)
.Select(a => (string)a.Attribute("name"))
.FirstOrDefault();
此外,你可以简单地检查是否找到了与你的值匹配的动物,只有在匹配的情况下才能获得名称:
var xpath = String.Format("Root/Animal[@value='{0}']", animal);
var animalElement = xdoc.XPathSelectElement(xpath);
if (animalElement != null)
MessageBox.Show((string)animalElement.Attribute("name"));
您可以将SelectNodes
用作XmlNodeList
,然后检查其节点计数。如果计数为零,则表示"未找到节点";否则,获取属性并打印:
XmlDocument xDoc = new XmlDocument();
xDoc.Load("animals.xml");
string animal = "Tiger";
XmlNodeList theList = xDoc.SelectNodes("/Root/Animal[@value='" + animal + "']");
if (theList.Count == 1) {
MessageBox.Show(Convert.ToString(theList[0].Attributes["value"].InnerText));
} else if (theList.Count == 0) {
MessageBox.Show("No "+animal);
} else {
MessageBox.Show("Multiple "+animal+"s");
}
类似的东西
var animalNode = xDoc.SelectSingleNode("/Root/Animal[@value='" + animal + "']");
if (animalNode != null)
{
var valueAttr = animalNode.Attributes["value"];
if (valueAttr != null)
{
MessageBox.Show(valueAttr.InnerText); //.value ???
}
}