2015-02-11 7 views
0

Учитывая следующий XML:C#: получить XPath атрибута для элемента XML

<enrollment> 
    <school> 
     <students> 
      <studentA fname="John" lname="Doe" age="23" /> 
      <studentB fname="Mary" lname="Johnson" age="22" /> 
     </students> 
    </school> 
</enrollment> 

и вот мой код итерировать attributes-

foreach(XmlAttribute attr in node.Attributes) 
{ 
    //--get the XPath for each attribute 
} 

Где узел = "studentA", как получить XPath для каждого атрибута?

EDIT: В основном то, что я пытаюсь достичь здесь, - это сравнить, если два узла одинаковы. Поэтому я должен проверить, имеют ли они одинаковые имена, атрибуты и значения атрибутов. Поэтому, учитывая узел, мне нужно выражение xpath, которое соответствует указанным условиям.

+0

Какая часть проверки того, имеют ли они «то же имя, атрибуты и значения атрибута **», требует знания XPaths атрибутов? – JLRishe

+0

@JLRishi Я забыл упомянуть, что два узла, которые нужно сравнить, - это разные XML-файлы. Учитывая узел в xml1, я получу его xpath и использую его, чтобы найти, существует ли подобный узел в xml2. Но я благодарен за то, что все ясно, я понял, что мне действительно нужен xpath для узла, а атрибуты - условия для этого выражения xpath. – jmc

ответ

2

вы можете сразу положить его, как и для всех studentA nodes-

Xpath- "//studentA"

или перебрать конкретный node- Xpath- "enrollment/school/students/studentA"

В случае, если вы хотите найти атрибут Fname

Xpath- "enrollment/school/students/studentA[@fname]"

Assum ING myXml вашего XMLDOCUMENT вы можете перебрать атрибуты конкретного узла как-

 System.Xml.XmlNode xn = myXml.SelectSingleNode("enrollment/school/students/studentA"); 
     foreach (System.Xml.XmlAttribute attrib in xn.Attributes) 
     { 
      // find attribute name using attrib.Name 
      string sAttribName = attrib.Name; 
      if (sAttribName == "fname") 
      { 
       //Check your codes here 
      }    
     } 
+0

ok. Я обновил коды. –

+0

+1 для этого теперь я могу получить элемент с атрибутом fname, но могу также показать мне выражение xpath, которое будет соответствовать, если элемент имеет более 1 атрибута. Например, fname, lname, age – jmc

+0

@wintersolstice, используете ли вы XMLDocument или Linq для XML? –

0
You can use enrollment/school/students/studentA/@fname 

@attribute для выбора атрибута.

+0

Ответ Рохита верен. У меня есть опечатка. Это должно быть зачисление/школа/ученики/studentA [@fname] – Sarathy

Смежные вопросы