我从未使用过多XML,需要一些帮助来阅读复杂的文件。
我试图找到嵌套在的数字: outputTree \命令\标题\透视\尺寸\类别\尺寸\类别\尺寸\组\类别\呼叫:文本(数)
我根本不知道该怎么做。 如果有人能告诉我一些这方面的基础知识,那将会很有帮助我看到的所有例子都是非常基本的,没有这么多级别,所以我在理解如何达到这个级别时遇到了问题。
谢谢。答案 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;
}
}
谢谢大家的帮助!并引导我走上这条道路!