XmlReader问题

时间:2013-11-22 15:13:24

标签: c# xml xmlreader

我从未使用过多XML,需要一些帮助来阅读复杂的文件。 enter image description here

我试图找到嵌套在的数字: outputTree \命令\标题\透视\尺寸\类别\尺寸\类别\尺寸\组\类别\呼叫:文本(数)

我根本不知道该怎么做。 如果有人能告诉我一些这方面的基础知识,那将会很有帮助我看到的所有例子都是非常基本的,没有这么多级别,所以我在理解如何达到这个级别时遇到了问题。

谢谢。

3 个答案:

答案 0 :(得分:1)

this answer中一样,您可以使用高级XPath过滤器直接选择XML节点

如:

var document = new XmlDocument();
document.Load("<fileName>");
XmlNode node = document.SelectSingleNode("outputTree/command/heading[@text='uid = 1015984.00']/pivotTable[@text='Coefficients']/dimension[@text='Model']");

请参阅此示例列表: http://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx

答案 1 :(得分:0)

您可以使用XPath query。根据您的文档结构,这应该是您想要的精确值:

var xml = XDocument.Load(@"c:\path\to\file.xml");
var nsManager = new XmlNamespaceManager(new NameTable());

nsManager.AddNamespace(
    "oms",
    "http://www.ibm.com/software/analytics/spss/xml/oms");

var cell = xml.XPathSelectElement(
    "oms:outputTree/oms:command[@text='Regression']/" +
    "oms:heading[@text='uid = 1015984.00']/" +
    "oms:pivotTable[@text='Coefficients']/" +
    "oms:dimension/oms:category/oms:dimension/oms:category/" +
    "oms:dimension/oms:group/oms:category/oms:cell",
    nsManager);

var number = (decimal)cell.Attribute("number");

Console.WriteLine(number);

根据需要调整。您将需要这些导入:

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

答案 2 :(得分:0)

我想我最终会这样做并添加一些if语句来捕获我正在寻找的数据:

XmlTextReader reader = new XmlTextReader("c:/temp/descriptives_table.xml");
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Read the attributes.
                            Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                        Console.WriteLine(">");
                        break;
                    case XmlNodeType.Text: //Display the text in each element.
                        Console.WriteLine(reader.Value);
                        break;
                    case XmlNodeType.EndElement: //Display the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }

谢谢大家的帮助!并引导我走上这条道路!