2013-08-07 3 views
-1

У меня есть оракул запрос для генерации ниже результата XML, и я хотел бы проверить только, если есть какое-либо значение атрибута внутри подзапроса и COL_LIST_ITEM узлов не другие. Если узлы имеют значение атрибута, чем запись, «он имеет значение атрибута» else «no attribute value». Я не уверен, правильный ли мой код! Есть ли способ сделать это?Выбор узлов XML по атрибуту Value

<VIEW xmlns="http://xmlns.oracle.com/ku" version="1.0"> 
    <SCHEMA value1="USER1">USER2</SCHEMA> 
    <NAME value1="VIEW_TBL_A">VIEW_TBL_B</NAME> 
    <COL_LIST> 
     <COL_LIST_ITEM> 
     </COL_LIST_ITEM> 
     <COL_LIST_ITEM src="2"> 
      <NAME>FIELD_A2</NAME> 
     </COL_LIST_ITEM> 
    </COL_LIST> 
    <SUBQUERY value1="SELECT FIELD_A1 
    FROM TBL_A 
    WHERE FIELD_A1 = 111">SELECT FIELD_A1, FIELD_A2 
    FROM TBL_A 
    WHERE FIELD_A1 = 111</SUBQUERY> 
</VIEW> 

Вот мой код

using (OracleConnection conn1 = new OracleConnection(oradb1)) 
{ 
    conn1.Open(); 
    using (OracleCommand crtCommand = new OracleCommand("SELECT dbms_metadata.get_sxml('VIEW','VIEW_TBL_A') FROM dual;", conn1)) 
    { 
     XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(crtCommand.ExecuteScalar().ToString()); 
    } 
} 
+1

'Я не уверен, если мой код правильный' Это не может быть неправильным, а не делать ничего, связанное с вашим вопросом!. – I4V

ответ

0

как насчет XDocument

XDocument doc = XDocument.Parse(crtCommand.ExecuteScalar().ToString()); 
XNamespace ns = "http://xmlns.oracle.com/ku"; 

if (doc.Descendants(ns + "COL_LIST_ITEM").Any(c => c.Attributes().Any())) 
    Console.WriteLine("COL_LIST has value"); 

и, конечно, добавить другие узлы, чтобы проверить

+0

«System.Collections.Generic.IEnumerable » не содержит определения для «Any» и никакого метода расширения «Any», принимающего первый аргумент типа «System.Collections.Generic.IEnumerable < System.Xml.Linq.XElement> '(вам не хватает директивы using или ссылки на сборку – user2661591

+0

Добавить ссылку на System.Xml.Linq – Jonesopolis

+0

Я уже добавляю ссылку System.Xml.Linq, но все еще показывает ошибку! – user2661591

0

Вы должны использовать LINQ для XML для запроса XML-документа:

XDocument document = XDocument.Load(xmlFile); 

IEnumerable<XElement> elements = 
    from element in document.Root.Elements("SUBQUERY") 
    where element.HasAttributes 
    select element; 

Для получения более подробной информации обратитесь к статье here.

+0

Не удалось найти реализацию шаблона запроса для типа источника 'System.Collections.Generic.IEnume Рабле ». «Где» не найдено. Вам не хватает ссылки на «System.Core.dll» или директиву для «System.Linq»? – user2661591

+0

Где я могу добавить, Если узлы оператора имеют значение атрибута, чем запись «у него есть значение атрибута« else »no value value – user2661591

0

Я также столкнулся с подобной проблемой при работе с универсальным Windows-приложением, а также был очень расстроен, когда VS не уточнил, в чем проблема. Хотя после нескольких часов работы в Интернете я нашел решение. Это было просто, но я не знаю, почему VS не указал его. В любом случае, вот оно: -

Добавить еще одну ссылку на ваш проект: - using System.Linq;кромеusing System.Xml.Linq;

using System.Linq; 
using System.Xml.Linq; 

Ошибки будут идти & проект будет строить.


Для получения дополнительной справки этой статьи: -

problem with using refrence to System.Xml.Linq

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