-1

我有一个 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());
    }
}
4

3 回答 3

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");

当然添加你的其他节点来检查

于 2013-08-07T20:36:12.697 回答
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;

有关详细信息,请参阅此处的文章。

于 2013-08-07T20:41:43.840 回答
0

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

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

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

错误将消失,项目将建立。


如需更多帮助,请参考本文:-

使用对 System.Xml.Linq 的引用的问题

于 2015-02-14T08:53:31.600 回答