我自己先顶一下,大家可以看看vb.net的程序实现
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using ClsListDWparseString;
namespace materialForm
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
////// localhost.Service1 a =new materialForm.localhost.Service1();
ClsListDWparseString.ClsListDw B =new ClsListDWparseString.ClsListDw();
//// System.Xml.XmlDocument xml =new System.Xml.XmlDocument();
//// xml.LoadXml(a.getMaterialFormSap("A-002").OuterXml);
//// B.setDocXML(xml.OuterXml);
///
System.Xml.XmlDocument xml =new System.Xml.XmlDocument();
XmlTextReader reader = new XmlTextReader ("1234567.xml");
xml.Load(reader);
B.setDocXML(xml.OuterXml);
DataSet ds =new DataSet();
ds=B.makeQueryResultDataSet();
DataGrid1.DataSource=ds;
DataGrid1.DataBind(); } #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
} }
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using ClsListDWparseString;
namespace materialForm
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
////// localhost.Service1 a =new materialForm.localhost.Service1();
ClsListDWparseString.ClsListDw B =new ClsListDWparseString.ClsListDw();
//// System.Xml.XmlDocument xml =new System.Xml.XmlDocument();
//// xml.LoadXml(a.getMaterialFormSap("A-002").OuterXml);
//// B.setDocXML(xml.OuterXml);
///
System.Xml.XmlDocument xml =new System.Xml.XmlDocument();
XmlTextReader reader = new XmlTextReader ("1234567.xml");
xml.Load(reader);
B.setDocXML(xml.OuterXml);
DataSet ds =new DataSet();
ds=B.makeQueryResultDataSet();
DataGrid1.DataSource=ds;
DataGrid1.DataBind(); } #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
} }
using System;
using System.Data;
using System.Xml;
using System.IO;
using System.Collections;
using System.Data.SqlClient;
using DatabaseSource;
using System.Runtime.InteropServices;
using ADODB;
using System.Data.OleDb;
namespace ClsListDWparseString
{
public class ClsListDw
{
private int intTotalPageNum = 1; //总的页数
private String CurrentPageNum;
private String strID;
private String textElement;
private XmlNodeList elements;
private XmlElement pOID;
private XmlElement pExtension;
private int intCurrentPageNum = 1; //当前页数
private int intEachPageNum = 10; //每页显示条数
private String strReturnHTML = ""; //返回的结果
private String docXML =""; //XML文档
private XmlDocument doc=null;
private XmlDocument QueryResultDocument;
//private System.Data.DataSet QueryResultDataSet;
private DataTable datasettable;
private DataTable dt;
//private String bgTdColor = ""; public int getIntTotalPageNum()
{ //输出intTotalPageNum接口
return this.intTotalPageNum;
}
public void setIntTotalPageNum(int intTotalPageNum)
{ //输入intTotalPageNum接口
this.intTotalPageNum = intTotalPageNum;
}
public int getIntEachPageNum()
{ //输出intEachPageNum接口
return this.intEachPageNum;
}
public void setIntEachPageNum(int intEachPageNum)
{ //输入intEachPageNum接口
this.intEachPageNum = intEachPageNum;
} public int getIntCurrentPageNum()
{ //输出intTotalPageNum接口
return this.intCurrentPageNum;
}
public void setIntCurrentPageNum(int intCurrentPageNum)
{ //输入intTotalPageNum接口
this.intCurrentPageNum = intCurrentPageNum;
} public String getStrReturnHTML()
{ //输出strReturnHTML接口
return this.strReturnHTML;
}
public void setStrReturnHTML(String strReturnHTML)
{ //输入strReturnHTML接口
this.strReturnHTML = strReturnHTML;
} public String getDocXML()
{ //输出docXML接口
return this.docXML;
}
public void setDocXML(String docXML)
{ //输入docXML接口
this.docXML = docXML;
} /****************************************
* 函数名:makeQueryResultShow
*
* 函数描述:解析显示查询结果
*
* @param none
*
* @return 0-解析正常
* 1 - XML文档为空
*
* @exception 数据库问题
* ***************************************/
public int makeQueryResultShow()
{
String strTable = null; String[] strProjectFlowContent;
int totalTitleNum = 0;
String bgTdColor="";
int totalWidth = 0; //总宽度
int intCurrentPage = 0;
int totalRowNum = 0; //总行数
int totalPageNum = 0;
if (docXML == "")
return 1;
this.doc.LoadXml(docXML);
XmlElement root = doc.DocumentElement;
// XmlElement root = (XmlElement)doc.ChildNodes.Item(0).Name;
String attRootErr = root.GetAttribute("Err"); //首先要读取根节点result中属性Err的值进行判断 int[] intAttWidth;
String[] textTitle;
if (attRootErr.Equals("F"))
{
//取"caption"元素节点中title集合
XmlNodeList captions = root.GetElementsByTagName("caption").Item(0).ChildNodes;
XmlElement caption = (XmlElement) captions.Item(0);
XmlNodeList titles=root.GetElementsByTagName("caption").Item(0).ChildNodes;
totalTitleNum = titles.Count; //取得总共要显示的字段个数
textTitle = new String[totalTitleNum];
intAttWidth = new int[totalTitleNum];
//依次取每个"title"元素,将各元素值放进数组
for (int i = 0; i < totalTitleNum; i++)
{
XmlElement title = (XmlElement) titles.Item(i);
XmlText textNode = (XmlText)title.FirstChild;//getFirstChild();
textTitle[i] = textNode.Value;//getNodeValue();
intAttWidth[i] = int.Parse(title.GetAttribute("width"));
//累加总宽度
totalWidth += intAttWidth[i];
}
//拼凑html标记显示内容 strTable = "<table border=\"0\" cellspacing=\"1\" cellpadding=\"0\" width=\"" + totalWidth + "\">";
//拼凑<table width="">元素标记
bgTdColor = "#5f8ce2";
strTable += "<tr class=\'title\'>";
for (int i = 0; i < totalTitleNum; i++)
{ strTable += "<th bgcolor=\'" + bgTdColor+ "\'"
+ " width=\""
+ intAttWidth[i]
+ "\">"
+ textTitle[i]
+ "</th>"; } strTable += "</tr>"; }
else
{
strTable = root.GetAttribute("Description");
if (strTable.Trim() == "数据集为空") return 2;
}
totalWidth = 0; //caption内容显示完毕 XmlNodeList datas = root.GetElementsByTagName("data").Item(0).ChildNodes;
//XmlElement data = (XmlElement)datas.Item(0);//item(0);取出得是row节点,应该是data节点,这是错误处
XmlElement data = (XmlElement)root.ChildNodes.Item(1); // 取得总行数
String totalRowNum1 = data.GetAttribute("totalRowNum");
totalRowNum = int.Parse(totalRowNum1);
//取得总页数
String strTotalPageNum = data.GetAttribute("totalPageNum");
intTotalPageNum = int.Parse(strTotalPageNum);
//XmlNodeList rows = data.GetElementsByTagName("row").Item(0).ChildNodes;
XmlNodeList rows = root.ChildNodes.Item(1).ChildNodes;
strTable += "<tr class=\'content\'>";
bgTdColor = "#e2f1f1";
for (int i = 0; i < totalRowNum; i++)
{ XmlElement row = (XmlElement) rows.Item(i);//item(i);
CurrentPageNum = row.GetAttribute("intPageNum");
//int intCurrentPageNums = Integer.parseInt(CurrentPageNum);
int intCurrentPageNums = int.Parse(CurrentPageNum); if ((intCurrentPageNums > intCurrentPageNum) ||(intCurrentPageNums > intCurrentPageNum))
{
break;
}
else
{
if (intCurrentPageNums == intCurrentPageNum) //都是 1 运行到此没问题
{
//XmlNodeList pOIDs = row.GetElementsByTagName("pOID").Item(0).ChildNodes;
XmlNodeList pOIDs = root.ChildNodes.Item(1).ChildNodes.Item(0).ChildNodes;
pOID = (XmlElement) pOIDs.Item(0);//item(0);
XmlText tpOID = (XmlText) pOID.FirstChild;//getFirstChild();
strID = tpOID.Value;//getNodeValue(); //获得row的标识号
//运行到此没问题
// XmlNodeList pExtensions =row.GetElementsByTagName("pExtension").Item(0).ChildNodes;
XmlNodeList pExtensions = root.ChildNodes.Item(1).ChildNodes.Item(0).ChildNodes;
pExtension = (XmlElement) pExtensions.Item(1);
//运行到此没问题
elements = row.GetElementsByTagName("element");
for (int j = 0; j < elements.Count; j++)
{
XmlElement element = (XmlElement) elements.Item(j);
//XmlText textNode = (Text) element.getFirstChild();
XmlText textNode = (XmlText) element.FirstChild;
//String textElement = NullToVoid(textNode.getNodeValue());
textElement = NullToVoid(textNode.Value);
strTable += "<td bgcolor=\'" + bgTdColor+ "\'> "
+ textElement
+ "</td>";
} if (i != totalRowNum - 1)
{
strTable += "</tr><tr>";
}
else
{
strTable += "</tr>";
}
} //if(intCurrentPageNum==intPageNum) } //if(intCurrentPageNum>intPageNum) } //第一个for
////下面也无错误
strTable += "<tr class=\'content\'>";
bgTdColor = "#e2f1f1";
strTable = strTable + "</table>"; strReturnHTML = strTable;
//return totalRowNum1+rows.Count.ToString()+ CurrentPageNum +pOID.Name +strID +pExtension.Name +elements.Count.ToString() +textElement;
//return strReturnHTML;
return 0;
}
{
DataSet QueryResultDataSet=new DataSet();
System.Data.DataTable dt=QueryResultDataSet.Tables.Add("PhoneNumbers");
dt.Columns.Add("name");
dt.Columns.Add("home");
dt.Columns.Add("mobile");
dt.Columns.Add("grade"); DataRow newRow ;
newRow = dt.NewRow();
newRow["name"] = "吕峰辉";
newRow["home"] = "河南";
newRow["mobile"] = "13585980524";
newRow["grade"] = "研二";
dt.Rows.Add(newRow); newRow = dt.NewRow();
newRow["name"] = "罗东花";
newRow["home"] = "广东";
newRow["mobile"] = "13564273194";
newRow["grade"] = "研二";
dt.Rows.Add(newRow); newRow = dt.NewRow();
newRow["name"] = "苏婷";
newRow["home"] = "湖北";
newRow["mobile"] = "13817036575";
newRow["grade"] = "研二";
dt.Rows.Add(newRow); newRow = dt.NewRow();
newRow["name"] = "郑怀亮";
newRow["home"] = "江西";
newRow["mobile"] = "13817036575";
newRow["grade"] = "已工作";
dt.Rows.Add(newRow);
return QueryResultDataSet;
}
//
public DataSet makeQueryResultDataSet()
{
XmlDataDocument QueryResultDataSet=new XmlDataDocument();
DataSet ResultDataSet=new DataSet();
String resultxml;
int i; //表头字段数目
int j; //表内记录条数
int k; //每条记录字段数
int lengthtitle;//表头字段数目
int lengthdata; //数据记录数目
int lengeverydata;//每条记录字段数目,应该等于i
String titlevalue;
String datavalue;
DataTable ResultDataTable=ResultDataSet.Tables.Add("ResultData");
DataRow newRow ;
QueryResultDataSet.LoadXml(docXML);
// 拼凑dataset表头
lengthtitle = QueryResultDataSet.GetElementsByTagName("caption").Item(0).ChildNodes.Count;
lengthdata = QueryResultDataSet.GetElementsByTagName("data").Item(0).ChildNodes.Count;
//取得表头值
for(i=0;i<=lengthtitle - 1;i++)
{ titlevalue = QueryResultDataSet.GetElementsByTagName("caption").Item(0).ChildNodes.Item(i).InnerText;
ResultDataTable.Columns.Add(titlevalue);
}
//取得数据值
for(j=0;j<=lengthdata - 1;j++)
{
lengeverydata =QueryResultDataSet.GetElementsByTagName("data").Item(0).ChildNodes.Item(j).ChildNodes.Item(1).ChildNodes.Count;
newRow = ResultDataTable.NewRow();
for(k=0;k<=lengeverydata - 1;k++)
{
datavalue = QueryResultDataSet.GetElementsByTagName("data").Item(0).ChildNodes.Item(j).ChildNodes.Item(1).ChildNodes.Item(k).InnerText;
newRow[ QueryResultDataSet.GetElementsByTagName("caption").Item(0).ChildNodes.Item(k).InnerText] =datavalue;
}
ResultDataTable.Rows.Add( newRow);
}
return ResultDataSet; }
private string NullToVoid(System.String strTmp)
{
if ( strTmp == null)
return "";
else
return strTmp.Trim();
}
}
}
不知道我得java程序是不是正确,请大家帮忙看看
B.xml 经过转换规则B 生成B1.xmlA1和B1的格式相同,你定义转换规则A,B即可感觉是这样
<?xml version="1.0" encoding="GB2312" ?>
<Sequence_Information>
<Sequence id="1" owner="企业A">
<caption>
<title id="A1" width="80">产品描述</title>
<title id="A2" width="80">零件编号</title>
<title id="A3" width="80">零部件名称</title>
<title id="A4" width="80">零件类型</title>
<title id="A5" width="80">设计时间</title>
<title id="A6" width="80">零件版本</title>
<title id="A7" width="80">零件图号</title>
</caption>
<data totalRowNum="1" totalPageNum="1">
<row intPageNum="1">
<pOID>Material number</pOID>
</row>
</data>
</Sequence>
<Sequence id="2" owner="企业B">
<caption>
<title id="B1" width="80">零件版本</title>
<title id="B2" width="80">零部件名称</title>
<title id="B3" width="80">零件编号</title>
<title id="B4" width="80">零件图号</title>
<title id="B5" width="80">设计时间</title>
<title id="B6" width="80">制造方式</title>
<title id="B7" width="80">零件类型</title>
</caption>
<data totalRowNum="1" totalPageNum="1">
<row intPageNum="1">
<pOID>零件版本</pOID>
</row>
</data>
</Sequence>
<Sequence id="3" owner="企业A和企业B">
<caption>
<title width="80">零件版本</title>
<Relation id="1">
<title1 id="A6" width="80"></title1>
<title2 id="B1" width="80"></title2>
</Relation>
<title width="80">零部件名称</title>
<Relation id="2">
<title1 id="A3" width="80"></title1>
<title2 id="B2" width="80"></title2>
</Relation>
<title width="80">零件编号</title>
<Relation id="3">
<title1 id="A2" width="80"></title1>
<title2 id="B3" width="80"></title2>
</Relation>
<title width="80">零件图号</title>
<Relation id="4">
<title1 id="A7" width="80"></title1>
<title2 id="B4" width="80"></title2>
</Relation>
<title width="80">设计时间</title>
<Relation id="5">
<title1 id="A5" width="80"></title1>
<title2 id="B5" width="80"></title2>
</Relation>
<title width="80">制造方式</title>
<Relation id="6">
<title1 id="A1" width="80"></title1>
<title2 id="B6" width="80"></title2>
</Relation>
<title width="80">零件类型</title>
<Relation id="7">
<title1 id="A4" width="80"></title1>
<title2 id="B7" width="80"></title2>
</Relation>
</caption>
<data totalRowNum="1" totalPageNum="1">
<row intPageNum="1">
<pOID></pOID>
</row>
</data>
</Sequence>
</Sequence_Information>
关注ing
这个基本上就是程序的原理
希望大家帮忙亚………………
这个基本上就是程序的原理
希望大家帮忙亚………………}
如果是这样的话,如果你不介意只用IE的话,我倒是觉得利用IE的数据岛来进行显示比较方便。
看了一圈,感觉不是很明白你的意思,希望上面的话能对你有所启发。