按属性值选择XML节点

时间:2013-08-07 20:31:37

标签: c# xml oracle

我有一个oracle查询来生成xml以下结果,如果SUBQUERY和COL_LIST_ITEM节点中有任何属性值而不是其他,我想检查。如果节点具有属性值而不是写“它具有属性值”否则为“无属性值”。我不确定我的代码是否正确!有没有办法做到这一点?

<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());
    }
}

3 个答案:

答案 0 :(得分: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");

当然还要添加其他节点以进行检查

答案 1 :(得分:0)

您应该使用LINQ to XML来查询XML文档:

XDocument document = XDocument.Load(xmlFile);

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

有关详细信息,请参阅文章here

答案 2 :(得分:0)

在使用通用Windows应用程序时,我也遇到了类似的问题,当VS没有明确说明问题是什么时,我也非常沮丧。虽然经过几小时的网上冲浪,我找到了解决方案。这很简单,但我不知道VS为什么没有指定它。无论如何,这里是: -

为您的项目添加另一个引用: - 使用System.Linq; 除了 使用System.Xml.Linq;

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

错误将会出现&amp;该项目将建成。


有关更多帮助,请参阅此文章: -

problem with using refrence to System.Xml.Linq