首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

写了读取XML函数,但是在一个节点下只能读到一行,

2012-01-31 
写了读取XML函数,但是在一个节点下只能读到一行,请高手看看?PARAMETER_SETGOODS_FLOW_OPERATIONPort_

写了读取XML函数,但是在一个节点下只能读到一行,请高手看看?
<PARAMETER_SET>
        <GOODS_FLOW_OPERATION>
                <Port_Operation>
                        <Port_Operation_TP   name= "Port_Ex "   value= "0 "   cn= "A "/>
      <Port_Operation_TP   name= "Port_Im "   value= "1 "   cn= "B "/>
                  </Port_Operation>
        </GOODS_FLOW_OPERATION>
</PARAMETER_SET>

private   string   GetXmlPath()
{
              return   Server.MapPath( "../bin/全局参数统一编码.xml ");
}

private   DataTable   CreateDataTable()
{
DataTable   myDataTable   =   new   DataTable();
DataColumn   myDataColumn;

//   Create   new   DataColumn,   set   DataType,   ColumnName   and   add   to   DataTable.        
myDataColumn   =   new   DataColumn();
myDataColumn.DataType   =   System.Type.GetType( "System.String ");
myDataColumn.ColumnName   =   "Text ";
myDataColumn.ReadOnly   =   true;
myDataColumn.Unique   =   false;
//   Add   the   Column   to   the   DataColumnCollection.
myDataTable.Columns.Add(myDataColumn);

//   Create   second   column.
myDataColumn   =   new   DataColumn();
myDataColumn.DataType   =   System.Type.GetType( "System.String ");
myDataColumn.ColumnName   =   "Value ";
myDataColumn.ReadOnly   =   true;
myDataColumn.Unique   =   false;
//   Add   the   column   to   the   table.
myDataTable.Columns.Add(myDataColumn);

return   myDataTable;
}
public   bool   ReadXmlForList(out   DataSet   dsDataSet)
{
dsDataSet   =   new   DataSet();  
try
{
DataTable   dt=   this.CreateDataTable();
DataRow     row;
inti=   0;

m_Xmldoc.Load(m_XmlPath);

XmlNodeList   nodes   =   m_Xmldoc.SelectNodes( "/PARAMETER_SET/GOODS_FLOW_OPERATION/Port_Operation[Port_Operation_TP/@name=   'Port_Ex '   and   Port_Operation_TP/@name=   'Port_Im '] ");

int   j   =   nodes.Count;///////这里读的总是1
foreach   (XmlNode   node   in   nodes)
{
row   =   dt.NewRow();
row[ "Text "]   =   node.ChildNodes[i].Attributes[ "cn "].Value;
row[ "Value "]   =   node.ChildNodes[i].Attributes[ "value "].Value;
dt.Rows.Add(row);
i++;
}
dsDataSet.Tables.Add(dt);
}
catch(System.Exception   ex)
{
return   false;
}
return   true;
}
int   j   =   nodes.Count;///////这里读的总是1
只能取到
<Port_Operation_TP   name= "Port_Ex "   value= "0 "   cn= "A "/>
就是取不到
<Port_Operation_TP   name= "Port_Im "   value= "1 "   cn= "B "/>
请问怎么会事?



------解决方案--------------------


通过节点的属性名读取啊
[解决办法]
这样呢
m_Xmldoc.SelectNodes( "/PARAMETER_SET/GOODS_FLOW_OPERATION/Port_Operation[Port_Operation_TP/@name= 'Port_Ex ' and /PARAMETER_SET/GOODS_FLOW_OPERATION/Port_OperationPort_Operation_TP/@name= 'Port_Im '] ");
[解决办法]
( "/PARAMETER_SET/GOODS_FLOW_OPERATION/Port_Operation[Port_Operation_TP/@name= 'Port_Ex ' and Port_Operation_TP/@name= 'Port_Im '] ");
还可以用and?没这样试过
[解决办法]
XmlNodeList nodes = m_Xmldoc.SelectNodes( "/PARAMETER_SET/GOODS_FLOW_OPERATION/Port_Operation[Port_Operation_TP/@name= 'Port_Ex ' and Port_Operation_TP/@name= 'Port_Im '] ");
---------------

调试看nodes 的内容是什么

[解决办法]
看错了,这样应该可以了
m_Xmldoc.SelectNodes( "/PARAMETER_SET/GOODS_FLOW_OPERATION/Port_Operation/Port_Operation_TP[@name= 'Port_Ex ' or @name = 'Port_Im '] ");

[解决办法]
XmlNodeList nodes = m_Xmldoc.SelectNodes( "/PARAMETER_SET/GOODS_FLOW_OPERATION/Port_Operation/Port_Operation_TP[@name= 'Port_Ex ' or @name = 'Port_Im '] ");

热点排行