我有一个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());
}
}
答案 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;该项目将建成。
有关更多帮助,请参阅此文章: -