使用XDocument读取XML值很困难 [英] Difficulty in reading XML values using XDocument
本文介绍了使用XDocument读取XML值很困难的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个如下的xml文件
I have an xml file as under
<ScriptFileNames>
<SqlEye>
<ScriptFile Name='_ws_CommandHistory_AllHistory.sql' Type='SP' SqlEyeAnalysisTime='00:00:01.7817594' FxCopAnalysisTime='00:00:00.2253670' FxCopWarningCount='0' SqlEyeWarningCount='2'>
<SqlEyeWarnings>
<SqlEyeWarning message='SD004: Check for existence object then Drop statement before create statement' />
<SqlEyeWarning message='SP001: Set NoCount statement missing or it should be ON.' />
</SqlEyeWarnings>
</ScriptFile>
</SqlEye>
</ScriptFileNames>
我希望输出为
文件名WarningMessage
格式
例如
_ws_CommandHistory_AllHistory.sql SD004: Check for existence object then Drop statement before create statement
_ws_CommandHistory_AllHistory.sql SP001: Set NoCount statement missing or it should be ON.
我的尝试
string input = @"<ScriptFileNames>
<SqlEye>
<ScriptFile Name='_ws_CommandHistory_AllHistory.sql' Type='SP' SqlEyeAnalysisTime='00:00:01.7817594' FxCopAnalysisTime='00:00:00.2253670' FxCopWarningCount='0' SqlEyeWarningCount='2'>
<SqlEyeWarnings>
<SqlEyeWarning message='SD004: Check for existence object then Drop statement before create statement' />
<SqlEyeWarning message='SP001: Set NoCount statement missing or it should be ON.' />
</SqlEyeWarnings>
</ScriptFile>
</SqlEye>
</ScriptFileNames>";
XDocument doc = XDocument.Parse(input);
XElement scriptFileNames = doc.Element("ScriptFileNames");
var xx = (from x1 in scriptFileNames.Element("SqlEye").Elements("ScriptFile")
select new
{
Name = x1.Attribute("Name").Value
}).ToList();
我还有更多的部分
<SqlEyeRemarks>
<SqlEyeRemark message='SD001: Set QuotedIdentifier ON statement is missing or order mismatch or it should be ON.' />
<SqlEyeRemark message='SD002: Set AnsiiNullsOn ON statement is missing or order mismatch or it should be ON.' />
<SqlEyeRemark message='SD009: Missing or order mismatch of Grant statement.' />
</SqlEyeRemarks>
我该如何相处?
推荐答案
您当前的代码仅迭代到 ScriptFile
级别.我怀疑最简单的方法是:
Your current code is only iterating to the ScriptFile
level. I suspect the simplest approach would be:
var warnings = doc.Descendants("SqlEyeWarning")
.Select(x => new {
FileName = (string) x.Parent.Parent.Attribute("Name"),
Message = (string) x.Attribute("message")
})
.ToList();
这使用 x.Parent.Parent
从 SqlEyeWarning
元素经过 SqlEyeWarnings
到 ScriptFile
.
我假设这里的 all SqlEyeWarning
元素都属于同一类结构.如果是这样,则以上是最简单的.否则,您可以使用:
I'm assuming that all SqlEyeWarning
elements here are within the same sort of structure. If they are, the above is simplest. Otherwise, you could use:
var warnings = doc.Root
.Element("SqlEye")
.Elements("ScriptFile")
.Elements("SqlEyeWarnings")
.Elements("SqlEyeWarning")
.Select(x => new {
FileName = (string) x.Parent.Parent.Attribute("Name"),
Message = (string) x.Attribute("message")
})
.ToList();
这篇关于使用XDocument读取XML值很困难的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文