2013-09-05 2 views
0

Я очень новичок в обработке XML в ASP.NET.Поиск XMLNODE

Я потребляю данные списка sharepoint в asp .net сайте через ссылку на веб-службу.

следующий - мой код для использования данных.

TestSharePointSite.Lists lists = new global::Test.TestSharePointSite.Lists(); 

lists.Url = "http://intranetsharepoint/global/test/_vti_bin/Lists.asmx"; 
lists.Credentials = System.Net.CredentialCache.DefaultCredentials; 

XmlNode n = lists.GetListItems("TestList", null, null, null, null, null, null); 

for (int i = 0; i < n.ChildNodes[1].ChildNodes.Count; i++) 
{ 
    if (n.ChildNodes[1].ChildNodes[i].Attributes != null) 
    { 
     foreach (XmlAttribute a in n.ChildNodes[1].ChildNodes[i].Attributes) 
     { 
      Response.Write("<br> .. " + a.Name + " .. " + a.InnerText); 
     } 
    } 
} 

И следующий мой выход из приведенного выше кода

.. ows_Content_x0020_Description .. string;#Fast Track 
.. ows_Dev_x002e__x0020_Location .. 32;#Numatics Actuator Tennessee 
.. ows_Strategic_x0020_Bucket0 .. 4;#Minor Revision 
--------------------- Other Attributes ---------------- 
.. ows_Engineer .. 584;#Tilmos, Wayne [INDAUTO/ASCONUM/NOVI] 
.. ows__ModerationStatus .. 0 

Теперь я хочу, чтобы искать конкретный XML элемент узла \ XML. Я хочу узел, в котором описание содержимого (здесь оно имеет имя ows_Content_x0020_Description) содержит Fast Track.

Я рассмотрел следующие вопросы о SO, но не смог реализовать решение в своем коде. Я попытался выполнить поиск по Google, но не смог это сделать. thx заранее.

Select XML node by attribute value

Find XmlNode where attribute value is contained in string

ответ

1
XmlDocument dddd = new XmlDocument(); 
      dddd.Load(@"D:\Development\xxxx\xxxxx.xml"); 
      XmlNode xnode = dddd.DocumentElement; 
      for (int i = 0; i < xnode.ChildNodes.Count; i++) 
      { 
       if(xnode.ChildNodes[i].Attributes !=null) 
        foreach (XmlAttribute a in xnode.ChildNodes[i].Attributes) 
        { 
         if (a.Name == "ows_Content_x0020_Description") 
         { 
          string nameddd = a.InnerText; 
         } 
        } 

      } 
2

Вы должны использовать выражение XPath для тестирования. Я предполагаю, что список переменных - это XmlDocument.

XmlNode node = 
    list.SelectSingleNode("//root/ows_Content_x0020_Description[contains(.,'Fast Track')]"); 

См http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.selectsinglenode.aspx

Edit: Тест вы выражение XPath с помощью XPathTester

+0

это дает мне следующее сообщение об ошибке '// корень/ows_Content_x0020_Description/Fast Track' имеет недопустимый маркер. обратите внимание, что значение «ows_Content_x0020_Description» равно «string; #Fast Track», а не «Fast Track» – Dhaval

+0

Я просто угадал имя пути. Вам нужно будет адаптировать его. Просто хотел продемонстрировать, насколько легко использовать XPath по сравнению с тем, что нужно писать петли foreach. – Papa

+0

ОК, я получил вашу точку зрения .. но я не буду искать поиск по точной величине, но мне нужно выбрать узел, который будет содержать заданное значение .. какой-то поиск по диким картам (что-то вроде «% Fast Track % ') – Dhaval

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