如何在sql中利用xml提取需要的数据,我想提取出所有location内的stationId,lon,lat数据

我按照msdn的openxml做法,显示空白,sql语句如下:DECLARE @x xmlDECLARE @hdoc intSELECT @x=WFROM OPENROWSET (BULK 'D:\xmldata\O-A0001-001\O-A0001-001-20160916232812.xml',SINGLE_BLOB) AS Weather(W)EXEC sp_xml_preparedocument @hdoc OUTPUT, @xSELECT *FROM OPENXML (@hdoc, '/cwbopendata/location',1)WITH( stationId varchar(8000), lat varchar(8000), lon varchar(8000))EXEC sp_xml_removedocument @hdoc但是执行后显示如下图片结果空白,如何解决谢谢。
去掉 最上面 xmlns="urn:cwb:gov:tw:cwbcommon:0.1" 能跑出结果,但是我不能每个原始xml都要去修改,怎么办解决这个问题?谢谢
最新回答
全世界失眠

2021-04-18 19:58:22

不能被函数调用是什么意思?你的函数呢?函数不写出来怎么帮你看?
我这个是假设你的到了XmlFiles/StuElements.xml,你不是已经通过File.CreateText(stuFileName)创建了该文件了吗?
我建议你直接DataSet1.WriteXml(filepath);这种方式直接把DataSet生成xml文件
string strFilePath = Server.MapPath ( "XmlFiles/StuElements.xml" );
System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument ( );

xmlDocument.Load ( strFilePath );

System.Xml.XmlElement xmlElement = xmlDocument.DocumentElement;

foreach ( System.Xml.XmlNode node in xmlElement.ChildNodes )
{
Response.Write ( "lat: " + node [ "lat" ].InnerText + ", lng: " + node [ "lng" ].InnerText + "<br />" );
}

//修改后的

System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("Data Source=.;Initial Catalog=Pubs;Integrated Security=True;");
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("Select * from Authors", conn);

System.Data.DataSet ds = new System.Data.DataSet();
conn.Open();

da.Fill(ds, "Authors");
System.Data.DataTable dt;
dt = ds.Tables["Authors"];

foreach (System.Data.DataColumn dc in dt.Columns)
{
dc.ColumnMapping = System.Data.MappingType.Attribute;
}

string filePath = Server.MapPath("XmlFiles/Stu.xml");
ds.WriteXml(filePath);

System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load(filePath);

System.Xml.XmlNodeList Authors= xmlDocument.GetElementsByTagName("Author");
foreach (System.Xml.XmlNode node in Authors)
{
Response.Write("FirstName:" + node.Attributes["FirstName"].Value + "<br />");
}