【问题标题】:look for specific node in XML multiple times and get the value of all the nodes多次查找XML中的特定节点并获取所有节点的值
【发布时间】:2017-02-02 23:44:26
【问题描述】:

我的 XML 看起来像这样。我有一个节点状态,这个状态可以在随机父节点下多次。但我想在我的 XML 中搜索每个状态,并在变量中捕获值说批准。我怎样才能做到这一点?此外,一旦我收集了所有状态,我希望它们存储在数据库中。基本上,我想在我的 XML 中查找所有状态并捕获这些值。

            <loop1>
                <loop2>
                    <ID>001</ID>
                    <status code="A">approve</status>
                    </loop2>
                    </loop1>

感谢任何帮助!

我尝试了以下代码 -

XmlDocument xDoc = new XmlDocument();
              xDoc.LoadXml(xmlValue);--xmlValue has my XML file content
              XmlElement xelRoot = xDoc.DocumentElement;
              XmlNodeList xnlNodes = xelRoot.SelectNodes("/status");
         foreach (XmlNode xNode in xnlNodes)
              {
                  string ostatus = xNode["status"].InnerText;
              } 

但是当我尝试读取内部文本时,我收到错误对象引用未设置实例。

【问题讨论】:

  • 您是否已经尝试过?你能给我们看一些代码吗?
  • 您想在 C# 应用程序中执行此操作还是数据库系统应解决此问题(哪个 RDBMS - 产品和版本)?您可能会阅读有关 深度搜索 XPath 的信息,例如 //status...
  • 我尝试使用 XMLelement 和 XMLdocument,但是当我尝试提取状态时,它给出的对象引用未设置为实例错误。我基本上想捕获所有状态值,然后检查数据库是否status isapproved, then bla bla else if status is denied 然后 bla bla

标签: c# sql xml visual-studio


【解决方案1】:

这不是最优雅的方法,但你很接近:

我在 XML 中又添加了一个状态节点

string YourXml = "<loop1><loop2><ID>001</ID><status code = \"A\">approve</status><status code = \"B\">deny</status></loop2></loop1>";

XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(YourXml); 
    XmlElement xelRoot = xDoc.DocumentElement;
XmlNodeList xnlNodes = xelRoot.SelectNodes("//status"); //Deep search!!
var sb = new StringBuilder();
foreach (XmlNode xNode in xnlNodes) {
    sb.AppendLine( string.Format("code='{0}' value='{1}'", xNode.Attributes["code"].Value,xNode.InnerText));
}
string result = sb.ToString();

结果是

code = 'A' value = 'approve'
code = 'B' value = 'deny'

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多