如何在.NET中的XmlElementAttributte中访问值

时间:2015-04-13 02:26:47

标签: c# .net xml web-services xml-parsing

我在.NET中调用Web服务操作,它返回带有以下类对象的xml数据:

    public partial class data : object, System.ComponentModel.INotifyPropertyChanged {

    private object[] itemsField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("currentRow", typeof(dataCurrentRow), Order=0)]
    [System.Xml.Serialization.XmlElementAttribute("deleteRow", typeof(dataDeleteRow), Order=0)]
    [System.Xml.Serialization.XmlElementAttribute("insertRow", typeof(dataInsertRow), Order=0)]
    [System.Xml.Serialization.XmlElementAttribute("modifyRow", typeof(dataModifyRow), Order=0)]
    public object[] Items {
        get {
            return this.itemsField;
        }
        set {
            this.itemsField = value;
            this.RaisePropertyChanged("Items");
        }
    }



    public partial class dataCurrentRow : object, System.ComponentModel.INotifyPropertyChanged {

    private object[] columnValueField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("columnValue", Order=0)]
    public object[] columnValue {
        get {
            return this.columnValueField;
        }
        set {
            this.columnValueField = value;
            this.RaisePropertyChanged("columnValue");
        }
    }

从Web服务调用返回Xml:

      <QAS_GETQUERYRESULTS_RESP_MSG xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas/QAS_GETQUERYRESULTS_RESP_MSG.VERSION_1">
     <webRowSet xmlns="http://java.sun.com/xml/ns/jdbc">
        <properties>
    ...
    ...
        </properties>
        <metadata>
    ...
    ...
        </metadata>
        <data>
           <currentRow>
              <columnValue>abc</columnValue>
              <columnValue>123</columnValue>
              <columnValue>xyz</columnValue>
           </currentRow>
           <currentRow>
              <columnValue>def</columnValue>
              <columnValue>456</columnValue>
              <columnValue>opq</columnValue>
           </currentRow>
        </data>
     </webRowSet>
  </QAS_GETQUERYRESULTS_RESP_MSG>

但是,我不知道如何访问xml值&#34; columnValue&#34;在.NET中使用类对象&#34; data&#34;。请帮助告诉我如何访问这些值。非常感谢!

1 个答案:

答案 0 :(得分:1)

没有所有代码都不容易回答,但是您应该能够迭代“Items”集合,检查每个代码的类型。如果您找到一个'typeof(dataCurrentRow)项,那么您应该能够将该对象转换为该类型并访问其属性集合(我希望它是'columnValue'对象的集合。你有吗?另一个部分类中的dataCurrentRow对象,如果你可以发布这个我可以给你一个例子。

编辑 - 您可以使用列值(请注意您需要将对象名称空间更改为与您自己的名称一致) -

        var myData = new data();
        //populate the data object via your webservice call.

        if (myData.Items != null && myData.Items.Length > 0)
        {
            var currentData = from c in myData.Items where c.GetType() == typeof(ConsoleApplication3.data.dataCurrentRow) select c as ConsoleApplication3.data.dataCurrentRow ;

            if (currentData != null && currentData.Count() > 0)
            {
                foreach (var row in currentData)
                {
                    if(row != null && row.columnValue != null)
                        Console.WriteLine(row.columnValue);
                }
            }
        }