Thursday, June 10, 2010

Поиск значений атрибутов в XML при помощи XPath в C#

Поиск значений атрибутов в XML при помощи Xpath в C#:

Однажды имелась потребность осуществить поиск по атрибутам элементов в xml базе:

<?xml version="1.0" encoding="utf-8" ?>

<sensomotor>

<aqustic less="180" more="" value="Удовлетворительно" signal="0"/>

<aqustic less="240" more="211" value="Пипец" signal="0"/><aqustic less="210"

more="181" value="Необходимы меры по оказанию ПМП"
signal="1"/>

...
<optic less="220" more="" value="Удовлетворительно" signal="0"/>

<optic less="260" more="220" value="Принять срочные меры по оказанию ПМП" signal="1"/>

<optic less="" more="260" value="Нет реакции" signal="2"/>...

</sensomotor>



В этой xml базе содержится соответствие диапазона значений и соответствующий им «диагноз». Атрибуты элементов определяют диапазоны значений.

Решить эту задачу можно в C# использую Xpath:

using System.Xml.XPath;

//current – значение которое должно входить в интервал задаваемое в атрибутах эл-та
//param — имя эл-та aqustic или optic
public string readConf(string current,string param)
{
XPathDocument xpdoc = new XPathDocument("conf.xml");
XPathNavigator nav = xpdoc.CreateNavigator();
XPathExpression expr = nav.Compile("sensomotor/"+param+"[(@more<" + current +
"and @less>" + current + ") or (@less>" + current + " and @more=\"\") or (@more<"+
current + " and @less=\"\")]");
XPathNodeIterator iter = nav.Select(expr);
string str="";
while (iter.MoveNext())
{
XPathNavigator nav2 = iter.Current.Clone();
// Выбираем у найденого эл-та атрибут “value”:
str += nav2.GetAttribute("value","");
}
return str;
}

No comments:

Post a Comment