【问题标题】:how to get id from an xml output from wsdl webservice如何从 wsdl webservice 的 xml 输出中获取 id
【发布时间】:2013-10-30 11:29:26
【问题描述】:

我有一个从 java 项目生成的 web 服务 (wsdl)。它的输出是 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>

在我的 cs 文件中,我解析 xml 并将结果放入数据集中。 这是我的代码

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;

现在我将数据集绑定到一个gridview,它只显示这个

Image of grid view here

如何从每个节点(即&lt;entry key="aid"&gt;)获取密钥并将“aid”和其他密钥显示为表头? cs 代码会很有帮助。

我想要一个网格数据,例如 this (Click here for grid image)

编辑 1

对于单行数据,Sam 的代码正在运行。但是当我输入这样的 xml 字符串时

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

它显示这个错误:-“有多个根元素”

【问题讨论】:

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


    【解决方案1】:

    试试这个

    你的 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
                    }
                }
            }
        }
    

    【讨论】:

    • 而不是 text.xml 文件,我将 xml 放在一个字符串中并传递给 XDocument.Load()。但我收到错误 - “路径中有非法字符。”当我创建一个 xml 文件并给出它运行正常的路径时。但是我怎样才能像表格一样获得标题和值..? List 只有一列。
    【解决方案2】:

    我尝试了您的 XML,我得到了这个结果。

    您需要创建StringReader 的新实例并将您的XML 传递给它。当您 DataSet 将包含 key 和 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;
            }
    

    【讨论】:

    • 如果有多行则出现xml异常`有多个根元素`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2019-12-06
    • 2016-12-07
    • 1970-01-01
    相关资源
    最近更新 更多