处理XML文件的小结
1. 取节点的值
1) 同一层次的
a. 循环遍历
private string processXpathQuery(XPathNavigator xpnav, String xPathQuery)
{
string strReturn="" ;
xpnav.MoveToFirstChild();
do
{
if (xpnav.LocalName==xPathQuery)
{
strReturn= xpnav.Value.ToString().Trim();
break;
}
}while(xpnav.MoveToNext());
xpnav.MoveToParent() ;
return strReturn;
}
string strReturn = processXpathQuery(xpnav, "userId");
b. 用XpathNodeIterator.select来查
private string processXpathQuery(XPathNavigator xpnav, String xPathQuery)
{
//XPath Reference: http://www.zvon.org/xxl/XPathTutorial/General/examples.html
//Using technique below, one can iterate through the set of nodes
//associated with a given Xpath query and process them accordingly.
XPathNodeIterator xpn = xpnav.Select(xPathQuery);
if(xpn.MoveNext())
return xpn.Current.Value;
else
return string.Empty ;
}
string strReturn = processXpathQuery(xpnav, " descendant::userId");
2) 不同层次的
a. 循环递归遍历
private void processRequestXML(XPathNavigator xpnav,int level)
{
xpnav.MoveToFirstChild();
do
{
switch (xpnav.LocalName)
{
case "userId":
myReq.UserId=xpnav.Value.ToString().Trim();
break;
case "password":
myReq.Password =xpnav.Value.ToString().Trim();
break;
case "flightNumber":
if (level==0)
myReq.FlightNumber=xpnav.Value.ToString().Trim();
else if(level==4)
myFlight.FlightNumber=xpnav.Value.ToString().Trim();
break;
case "reservation":
processRequestXML(xpnav,level+1);
xpnav.MoveToParent();
break;
//reservation child nodes
case "orderID":
myReservation.OrderId =xpnav.Value.ToString().Trim();
break;
default:
break;
}
}while(xpnav.MoveToNext());
}
processRequestXML(xpnav,0);
2. 把字符串转成XML文档类型
StringReader sr = new StringReader(myXML);
XPathDocument xp = new XPathDocument(sr);
XPathNavigator xpnav = xp.CreateNavigator();
xpnav.MoveToFirstChild();
3. 把XML文档类型转成字符串
public string responseXML(string node, string message)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
XmlTextWriter xw = new XmlTextWriter(sw);
xw.Formatting = Formatting.Indented ;
xw.WriteStartDocument();
xw.WriteStartElement("ErrorMessage");
xw.WriteElementString("Node", node);
xw.WriteElementString("Message", message);
xw.WriteEndElement();
xw.WriteEndDocument();
String sXmlResponse = sb.ToString();
return sXmlResponse;
}