简体   繁体   English

如何从wsdl Webservice的xml输出中获取ID

[英]how to get id from an xml output from wsdl webservice

i have a webservice (wsdl) generated from a java project. 我有一个从Java项目生成的Web服务(wsdl)。 its output is getting as xml format. 其输出以xml格式获取。 something like this 像这样的东西

<?xml version="1.0" encoding="UTF-8"?><list><map><entry key="aid">160608</entry><entry key="aDate">2013-10-24 00:00:00.0 IST</entry><entry key="insuranceType">Self Pay</entry><entry key="status">New</entry><entry key="pid">160576</entry><entry key="pChartno" /><entry key="lName">Mathur</entry><entry key="fName">Gaurav</entry><entry key="mName">mathur</entry><entry key="gender">Male</entry><entry key="ssn" /><entry key="providerId">2030</entry><entry key="providerFname">lakshman</entry></map></list>

in my cs file i parse the xml and put the result in a dataset. 在我的CS文件中,我解析xml并将结果放入数据集中。 here is my code 这是我的代码

DataSet dsresult = new DataSet();
XmlDocument xml = new XmlDocument();
xml.LoadXml("--XML String From Webservice Here--");
XmlElement exelement = xml.DocumentElement;

XmlNodeReader nodereader = new XmlNodeReader(exelement);
dsresult.ReadXml(nodereader, XmlReadMode.Auto);
return dsresult;

now i bind the dataset to a gridview and it show only this 现在我将数据集绑定到gridview,它仅显示此

Image of grid view here 此处的网格视图图像

how can i get the key from each node ie, from <entry key="aid"> and display "aid" and other keys as table head? 我如何从每个节点(例如<entry key="aid">密钥,并在表头中显示“ aid”和其他密钥? cs code will be helpful. CS代码会有所帮助。

i want a grid data like this (Click here for grid image) 我想要这样的网格数据(单击此处获取网格图像)

EDIT 1 编辑1

For single row data,Sam's code is working. 对于单行数据,Sam的代码有效。 but when i input an xml string like this 但是当我输入这样的xml字符串时

<?xml version="1.0" encoding="UTF-8"?><list><map><entry key="aid">173661</entry><entry key="aDate">2013-10-28 00:00:00.0 IST</entry><entry key="insuranceType">Self Pay</entry><entry key="status">Serviced</entry><entry key="pid">163686</entry><entry key="pChartno" /><entry key="lName">Bec&amp;&amp;kwith</entry><entry key="fName">Burt</entry><entry key="mName" /><entry key="gender">Male</entry><entry key="ssn" /><entry key="providerId">137935</entry><entry key="providerFname">test</entry></map><map><entry key="aid">173675</entry><entry key="aDate">2013-10-28 00:00:00.0 IST</entry><entry key="insuranceType">Self Pay</entry><entry key="status">New</entry><entry key="pid">2038</entry><entry key="pChartno" /><entry key="lName">Velusamy </entry><entry key="fName">Anand</entry><entry key="mName">M</entry><entry key="gender">Male</entry><entry key="ssn">12345690</entry><entry key="providerId">137935</entry><entry key="providerFname">test</entry></map><map><entry key="aid">173679</entry><entry key="aDate">2013-10-28 00:00:00.0 IST</entry><entry key="insuranceType">Self Pay</entry><entry key="status">Serviced</entry><entry key="pid">140417</entry><entry key="pChartno" /><entry key="lName">alex</entry><entry key="fName">pandian</entry><entry key="mName" /><entry key="gender">Male</entry><entry key="ssn" /><entry key="providerId">137935</entry><entry key="providerFname">test</entry></map></list>

it shows this error:-"There are multiple root elements" 它显示此错误:-“有多个根元素”

I tried your XML and I got this result. 我尝试了您的XML,并得到了这个结果。

在此处输入图片说明

You need to create new instance of StringReader and pass your XML to it. 您需要创建StringReader新实例并将XML传递给它。 As you DataSet will contain key and desc columns you need to create a DataTable to convert the rows to columns, hence the extra function. 由于您的DataSet将包含键和desc列,因此您需要创建一个DataTable来将行转换为列,因此需要额外的功能。

 protected void Page_Load(object sender, EventArgs e)
        {
            DataSet dsresult = new DataSet();
            XmlDocument xml = new XmlDocument();
            xml.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><list><map><entry key=\"aid\">160608</entry><entry key=\"aDate\">2013-10-24 00:00:00.0 IST</entry><entry key=\"insuranceType\">Self Pay</entry><entry key=\"status\">New</entry><entry key=\"pid\">160576</entry><entry key=\"pChartno\" /><entry key=\"lName\">Mathur</entry><entry key=\"fName\">Gaurav</entry><entry key=\"mName\">mathur</entry><entry key=\"gender\">Male</entry><entry key=\"ssn\" /><entry key=\"providerId\">2030</entry><entry key=\"providerFname\">lakshman</entry></map></list>");
            XmlElement exelement = xml.DocumentElement;

            dsresult.ReadXml(new XmlTextReader(new System.IO.StringReader(exelement.InnerXml)));

            DataTable transposedTable = GenerateTransposedTable(dsresult.Tables[0]);

            grd.DataSource = transposedTable;
            grd.DataBind();
        }

 private DataTable GenerateTransposedTable(DataTable inputTable)
        {
            DataTable outputTable = new DataTable();

            // Add columns by looping rows

            // Header row's first column is same as in inputTable
            outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString());

            // Header row's second column onwards, 'inputTable's first column taken
            foreach (DataRow inRow in inputTable.Rows)
            {
                string newColName = inRow[0].ToString();
                outputTable.Columns.Add(newColName);
            }

            // Add rows by looping columns        
            for (int rCount = 1; rCount <= inputTable.Columns.Count - 1; rCount++)
            {
                DataRow newRow = outputTable.NewRow();

                // First column is inputTable's Header row's second column
                newRow[0] = inputTable.Columns[rCount].ColumnName.ToString();
                for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++)
                {
                    string colValue = inputTable.Rows[cCount][rCount].ToString();
                    newRow[cCount + 1] = colValue;
                }
                outputTable.Rows.Add(newRow);
            }

            return outputTable;
        }

try this 尝试这个

Your Xml 您的Xml

<?xml version="1.0" encoding="UTF-8" ?> 
<list>
<map>
 <entry key="aid">160608</entry> 
 <entry key="aDate">2013-10-24 00:00:00.0 IST</entry> 
 <entry key="insuranceType">Self Pay</entry> 
 <entry key="status">New</entry> 
<entry key="pid">160576</entry> 
<entry key="pChartno" /> 
<entry key="lName">Mathur</entry> 
<entry key="fName">Gaurav</entry> 
<entry key="mName">mathur</entry> 
<entry key="gender">Male</entry> 
<entry key="ssn" /> 
<entry key="providerId">2030</entry> 
<entry key="providerFname">lakshman</entry> 
</map>
</list>

private void LoadData()
    {
        XDocument xDoc = XDocument.Load("E:\\test.xml");
        XElement xEle = xDoc.XPathSelectElement("//map");
        List<string> lstValues = new  List<string>();
        if (xEle != null)
        {
            foreach (XElement xElement in xEle.Descendants())
            {
                if (xElement.Attribute("key") != null)
                {
                    lstValues.Add(xElement.Attribute("key").Value); // In this List you will get everything
                }
            }
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM