Часть содержимого XML:
<section name="Header">
<placeholder name="HeaderPane"></placeholder>
</section>
<section name="Middle" split="20">
<placeholder name="ContentLeft" ></placeholder>
<placeholder name="ContentMiddle"></placeholder>
<placeholder name="ContentRight"></placeholder>
</section>
<section name="Bottom">
<placeholder name="BottomPane"></placeholder>
</section>
Я хочу проверить каждый узел и атрибут split
существует, попробуйте назначить значение атрибута в переменной.
Внутри цикла я пытаюсь:
foreach (XmlNode xNode in nodeListName)
{
if(xNode.ParentNode.Attributes["split"].Value != "")
{
parentSplit = xNode.ParentNode.Attributes["split"].Value;
}
}
Но я ошибаюсь, если условие проверяет только значение, а не наличие атрибутов. Как следует Я проверяю наличие атрибутов?
Вы можете индексировать непосредственно в коллекцию атрибутов (если вы используете C #, а не VB):
foreach (XmlNode xNode in nodeListName)
{
XmlNode parent = xNode.ParentNode;
if (parent.Attributes != null
&& parent.Attributes["split"] != null)
{
parentSplit = parent.Attributes["split"].Value;
}
}
var splitEle = xn.Attributes["split"];
if (splitEle !=null){
return splitEle .Value;
}
Вы можете использовать LINQ & to nbsp; XML,
XDocument doc = XDocument.Load(file);
var result = (from ele in doc.Descendants("section")
select ele).ToList();
foreach (var t in result)
{
if (t.Attributes("split").Count() != 0)
{
// Exist
}
// Suggestion from @UrbanEsc
if(t.Attributes("split").Any())
{
}
}
ИЛИ
XDocument doc = XDocument.Load(file);
var result = (from ele in doc.Descendants("section").Attributes("split")
select ele).ToList();
foreach (var t in result)
{
// Response.Write("<br/>" + t.Value);
}
Еще один способ справиться с ситуацией - это обработка исключений.
Каждый раз, когда вызывается несуществующее значение, ваш код восстанавливается после исключения и просто продолжает цикл. В блоке catch вы можете обработать ошибку так же, как записываете ее в своем операторе else, когда выражение (...! = Null) возвращает false. Конечно, создание и обработка исключений является относительно дорогостоящей операцией, которая может быть не идеальной в зависимости от требований к производительности.