从 ASP.NET SOAP 服务检索 XML 数据到 ASP.NET aspx 页面
Posted
技术标签:
【中文标题】从 ASP.NET SOAP 服务检索 XML 数据到 ASP.NET aspx 页面【英文标题】:Retrieve XML data from ASP.NET SOAP Service to ASP.NET aspx page 【发布时间】:2020-01-23 12:28:25 【问题描述】:当用户输入 ID 时,我有返回 XML 数据的 Web 服务。如果数据库中存在 ID,它将返回 XML 数据,现在我创建 Test Project
作为参考,我使用此 SOAP Services
。
[WebMethod]
public DataTable GetAkontasById(int Id)
OracleConnection conn = new OracleConnection("DATA SOURCE=test-1:1521/test;USER ID=test;PASSWORD=test");
OracleDataAdapter dr = new OracleDataAdapter("Select * from AKONTAS where A_KONTO= '" + Id + "'", conn);
DataSet ds = new DataSet();
ds.Tables.Add("AKONTAS");
dr.Fill(ds, "AKONTAS");
DataTable tt = ds.Tables[0];
return tt;
这是运行Web Service
后我的xml的样子
<DataTable xmlns="http://tempuri.org/">
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="AKONTAS" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="AKONTAS" msprop:BaseTable.0="AKONTAS">
<xs:complexType>
<xs:sequence>
<xs:element name="A_KONTO" msprop:BaseColumn="A_KONTO" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="NAZIV" msprop:BaseColumn="NAZIV" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="SIFRA_RAD" msprop:BaseColumn="SIFRA_RAD" msprop:OraDbType="104" type="xs:string" minOccurs="0"/>
<xs:element name="OPSTINA" msprop:BaseColumn="OPSTINA" msprop:OraDbType="104" type="xs:string" minOccurs="0"/>
<xs:element name="MB" msprop:BaseColumn="MB" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="ULICA" msprop:BaseColumn="ULICA" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="BROJ" msprop:BaseColumn="BROJ" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="PBROJ" msprop:BaseColumn="PBROJ" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="MJESTO" msprop:BaseColumn="MJESTO" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="PORESKI" msprop:BaseColumn="PORESKI" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="TRANSAKCIJ" msprop:BaseColumn="TRANSAKCIJ" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="INTERNET" msprop:BaseColumn="INTERNET" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="EMAIL" msprop:BaseColumn="EMAIL" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="KONTAKT" msprop:BaseColumn="KONTAKT" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="TELEFON" msprop:BaseColumn="TELEFON" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="FAKS" msprop:BaseColumn="FAKS" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="DAT_UNOS" msprop:BaseColumn="DAT_UNOS" msprop:OraDbType="106" type="xs:dateTime" minOccurs="0"/>
<xs:element name="PDVMB" msprop:BaseColumn="PDVMB" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="VRSTA_KLIJENTA" msprop:BaseColumn="VRSTA_KLIJENTA" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
<xs:element name="DRZAVA" msprop:BaseColumn="DRZAVA" msprop:OraDbType="126" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<AKONTAS diffgr:id="AKONTAS1" msdata:rowOrder="0">
<A_KONTO>515534</A_KONTO>
<NAZIV>ABC</NAZIV>
<SIFRA_RAD>30017</SIFRA_RAD>
<MB>123456789000</MB>
<DAT_UNOS>2005-12-07T00:00:00+01:00</DAT_UNOS>
</AKONTAS>
</NewDataSet>
</diffgr:diffgram>
</DataTable>
现在O创建aspx
页面,其中包含作为参考Web Service.
这个aspx
也需要返回XML 数据,现在我卡在这里,不知道如何获取这个XML 数据并将其传递给aspx
页面。
你建议我怎么做?
protected void btnProjeri_Click(object sender, EventArgs e)
AkontasService.AkontasSoapClient client =
new AkontasService.AkontasSoapClient();
var rezultat = client.GetAkontasById(Convert.ToInt32(txtAkonto.Text));
txtRezultat.Text = rezultat.ToString();
【问题讨论】:
这是您第三次提问。您有一个带有嵌入式架构和数据表的 XML。您还有一个带有 xmlns 的无效 xml,并且没有像数据集的“id”这样的命名空间。 嵌入式模式和数据表是什么意思?带有 xmlns 的无效 xml 并且没有像数据集的“id”这样的命名空间 @jdweng 请不要谈论你不熟悉的东西。 DataSet 和 DataTable 是唯一且唯一可用于从数据库中检索数据的。我问的是消费来自 SOAP 服务的数据。 看这个帖子coding-vila.blogspot.com/2019/03/… 大量页面和帖子我阅读了您的答案,并且在每篇帖子中我都得到了相同的结果。您可以在上面的帖子中阅读其中之一 【参考方案1】:尝试以下 linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication132
class Program
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
string xml = File.ReadAllText(FILENAME);
XDocument doc = XDocument.Parse(xml);
List<XElement> AKONTAS = doc.Descendants("AKONTAS").ToList();
var results = AKONTAS.Select(x => x.Elements().Select(y => new KeyValuePair<string, string>(y.Name.LocalName, (string)y)).ToList()).ToList();
foreach (var result in results)
Console.WriteLine(string.Join(",", result.Select(x => x.Key + " : " + x.Value)));
Console.ReadLine();
【讨论】:
请再读一遍我的问题。我不需要 const string FILENAME = @"c:\temp\test.xml";由于我从我的 SOAP 服务获取 XML,我不想从 .xml 文件中读取 这行代码是什么意思?常量字符串 FILENAME = @"c:\temp\test.xml"; 为了测试,我只是将 xml 放入一个文件中。你只需要使用 XDocument.Parse(string)。 System.Xml.XmlException: '缺少根元素。' 我不知道这段代码是做什么的,但是当我检查和调试它时,它看起来什么都没有。我通过它只打开控制台并关闭它,第二次运行时出现错误,第三次运行时也没有发生任何事情以上是关于从 ASP.NET SOAP 服务检索 XML 数据到 ASP.NET aspx 页面的主要内容,如果未能解决你的问题,请参考以下文章
应用程序升级到oracle 11g后,无法通过SOAP API Web服务检索数据
ASP.NET Web Service 标准SOAP开发案例代码(自定义验证安全头SOAPHeader)
从 ASP.NET MVC 项目调用 .NET CORE 5 Web API 微服务时无法检索 BadRequest 错误