Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何得到4个变量的子项_C#_Xml_Xpath - Fatal编程技术网

C# 如何得到4个变量的子项

C# 如何得到4个变量的子项,c#,xml,xpath,C#,Xml,Xpath,我试图使用XPath从XML文档中获取一些变量问题是它们每次都不同(变量),但总有4个变量我只是不确定如何从XML文档中获取数据 我对XML或XPath不是很在行,但这是我到目前为止所想到的,我被卡住了,因为我不知道如何循环单元格以从中获取数据 for (int i = 0; i < 3; i++) { string sElementInfo = string.Empty;

我试图使用XPath从XML文档中获取一些变量问题是它们每次都不同(变量),但总有4个变量我只是不确定如何从XML文档中获取数据

我对XML或XPath不是很在行,但这是我到目前为止所想到的,我被卡住了,因为我不知道如何循环单元格以从中获取数据

    for (int i = 0; i < 3; i++)
                {
                    string sElementInfo = string.Empty;
                    var cell = xml.XPathSelectElement(
                    "oms:outputTree/oms:command[@text='Discriminant']/" +
                    "oms:heading[@text='Analysis 1']/" +
                    "oms:heading[@text='Classification Statistics']/" +
                    "oms:pivotTable[@text='Classification Function Coefficients']/" +
                    "oms:dimension[@text='(Variables)']",
                    nsManager);

                    if (cell != null)
                    {
                        sStatement1 = (string)cell.Attribute("varName");
                    }

                }
for(int i=0;i<3;i++)
{
string sElementInfo=string.Empty;
var cell=xml.XPathSelectElement(
“oms:输出树/oms:命令[@text='Discriminant']/”+
“oms:标题[@text='Analysis 1']/”+
“oms:标题[@text='Classification Statistics']/”+
“oms:数据透视表[@text=”分类函数系数']/”+
“oms:维度[@text='(变量)””,
国家统计局局长);
如果(单元格!=null)
{
ssstatement1=(字符串)cell.Attribute(“varName”);
}
}
e4、e17和e22每次都会不同,因此我无法通过该名称找到它们,而且框中的“数字”每次也会不同,因此我也不确定如何获得它们。 我想如果我把整份文件都翻了一遍,我就不知道怎么去下一个牢房了。任何帮助都会很好! 多谢各位

如果这有帮助的话,这就是我通常使用xpath所做的,问题是我不知道varName将是什么,因此我可以从不同的XML文档中挑出其余的数据,但类似于:

    var xml = XDocument.Load(@"c:/temp/descriptives_table.xml");
            var nsManager = new XmlNamespaceManager(new NameTable());

            nsManager.AddNamespace(
                "oms",
                "http://www.ibm.com/software/analytics/spss/xml/oms");
            try
            {
                SqlDataReader sqlDR = sqlCom.ExecuteReader();
                while (sqlDR.Read())
                {
                    string sElementInfo = string.Empty;
                    var cell = xml.XPathSelectElement(
                    "oms:outputTree/oms:command[@text='Regression']/" +
                    "oms:heading[@text='uid = " + sqlDR.GetDouble(0) + ".00']/" +
                    "oms:pivotTable[@text='Coefficients']/" +
                    "oms:dimension/oms:category/oms:dimension/oms:category[@text='(Constant)']/" +
                    "oms:dimension/oms:group/oms:category/oms:cell",
                    nsManager);
                    if (cell != null)
                    {
                        var number = (string)cell.Attribute("number");
                        sElementInfo = sqlDR.GetDouble(0) + ", " + number + ", ";
                        //Console.WriteLine(sqlDR.GetDouble(0).ToString() + " (Constant) " + number);
                        for (int i = 1; i < 37; i++)
                        {

                            var xElement = xml.XPathSelectElement(
                            "oms:outputTree/oms:command[@text='Regression']/" +
                            "oms:heading[@text='uid = " + sqlDR.GetDouble(0) + ".00']/" +
                            "oms:pivotTable[@text='Coefficients']/" +
                            "oms:dimension/oms:category/oms:dimension/oms:category[@text='e" + i +"']/" +
                            "oms:dimension/oms:group/oms:category/oms:cell",
                            nsManager);
                            if (xElement != null)
                            {
                                var nElement = (string)xElement.Attribute("text");
                                sElementInfo = sElementInfo + nElement + ", ";
                                //Console.WriteLine(sqlDR.GetDouble(0).ToString() + " e" + i + " " + nElement);
                                //Console.WriteLine(" ");
                            }
                        }
                        //Console.WriteLine(sElementInfo.Remove(sElementInfo.Length-2));
var xml=XDocument.Load(@“c:/temp/descriptives_table.xml”);
var nsManager=newxmlnamespacemanager(newnametable());
nsManager.AddNamespace(
“oms”,
"http://www.ibm.com/software/analytics/spss/xml/oms");
尝试
{
SqlDataReader sqlDR=sqlCom.ExecuteReader();
while(sqlDR.Read())
{
string sElementInfo=string.Empty;
var cell=xml.XPathSelectElement(
“oms:outputTree/oms:command[@text='Regression']/”+
“oms:标题[@text='uid=“+sqlDR.GetDouble(0)+.00']/”+
“oms:数据透视表[@text='coverties']/”+
“oms:维度/oms:类别/oms:维度/oms:类别[@text=”(常量)]/”+
“oms:维度/oms:组/oms:类别/oms:单元”,
国家统计局局长);
如果(单元格!=null)
{
var number=(字符串)cell.Attribute(“number”);
sElementInfo=sqlDR.GetDouble(0)+“,“+number+”,”;
//Console.WriteLine(sqlDR.GetDouble(0.ToString()+“(常量)”+数字);
对于(int i=1;i<37;i++)
{
var xElement=xml.XPathSelectElement(
“oms:outputTree/oms:command[@text='Regression']/”+
“oms:标题[@text='uid=“+sqlDR.GetDouble(0)+.00']/”+
“oms:数据透视表[@text='coverties']/”+
“oms:维度/oms:类别/oms:维度/oms:类别[@text='e'+i+']/”+
“oms:维度/oms:组/oms:类别/oms:单元”,
国家统计局局长);
if(xElement!=null)
{
var neelement=(字符串)xElement.Attribute(“文本”);
sElementInfo=sElementInfo+neelement+“,”;
//Console.WriteLine(sqlDR.GetDouble(0.ToString()+“e”+i+“”+neElement);
//控制台。写线(“”);
}
}
//Console.WriteLine(sElementInfo.Remove(sElementInfo.Length-2));

您可以尝试使用
System.Xml.Linq

        var doc = XDocument.Load("XMLFile1.xml");

        XNamespace ns = @"http://www.ibm.com/software/analytics/spss/xml/oms";

        var pivotTables = doc.Descendants(ns + "pivotTable");

        // identify the pivottable by the text "Classified Function Coefficients"
        var theTable = pivotTables.Where(table => table.Attribute( "text").Value == "Classification Function Coefficients");

        // first dimension
        var dimension = theTable.Elements(ns + "dimension").First();

        // first dimensions categories
        var categories = dimension.Elements(ns + "category");

        foreach (var category in categories)
        {
            // at index 5 there exists a category without varname and text="(Constant)"
            // skip it
            if(!category.Attributes().Any(attr => attr.Name == "varName"))
                continue;

            // here's the varname                
            var varName = category.Attribute( "varName").Value;

            if (varName.StartsWith("("))
                continue;

            System.Diagnostics.Debug.WriteLine(varName);
            var cells = category.Descendants(ns + "cell");

            foreach (var cell in cells)
            {
                // here's the number of the cell
                var number = cell.Attribute("number").Value;
                System.Diagnostics.Debug.WriteLine(number);
            }
        }
输出:

  • e9
  • 0.163950172531
  • 0.13063860362111
  • 0.28542086095635

  • e18

  • 0.32758593355552
  • 0.071751070799144
  • 0.4532773907448

  • e33

  • 0.16067704682981
  • 0.25422301797
  • 0.01461475905339

  • e34

  • 0.3033365693718
  • 0.12043800410649
  • 0.58905116575338

能否请您提供一些示例XML进行处理。我尝试将XML添加到其中,但不确定这是我添加图像的原因。XML非常长。您只需键入
编号即可。我需要varName,并对红色框中的部分进行编号。然后请使用XML创建一个粘贴或要点或类似内容,并链接到它。请务必更改“类别”听起来像是一个可能常见的元素名称,因此可能出现在xml中的其他位置。如果是这样的话,这将不起作用。但是,稍微修改一下可能就可以了。是的,这个xml文档中到处都是类别。@robert.westerlund没错。但是对于这种情况,我非常确定这已经足够了。@user1221399XML文件的正常行为。robert的意思是,
category
将用于所示之外的另一个上下文中。它将挂起维度,但我认为这只是我玩它的问题。我将在几天后与您联系