如何取得xml节点属性?

xuejia_ 2005-05-09 12:54:57
1.如何取Asin值?
2.如何取ContributingSubdomains下所有DataUrl值?并填充到一个dataset?

谢谢,解决问题再送100分

<?xml version="1.0" encoding="UTF-8"?>
<UrlInfoResponse xmlns="http://webservices.amazon.com/AWSAlexa/2004-09-15">
<OperationRequest>
<RequestId>0CE9A7MYA16VQ7AZVRQW</RequestId>
</OperationRequest>
<UrlInfoResult>
<Request>
<IsValid>True</IsValid>
</Request>
<Alexa>
<TrafficData>
<DataUrl_Root type="canonical">domain.com/</DataUrl_Root>
<Asin>B0001Z22NM</Asin>
<Rank>250939</Rank>
<ContributingSubdomains>
<ContributingSubdomain>
<DataUrl>domain.com</DataUrl>
<TimeRange>
<Months>1</Months>
</TimeRange>
<Reach>
<Percentage>89%</Percentage>
</Reach>
<PageViews>
<Percentage>73%</Percentage>
<PerUser>1.7</PerUser>
</PageViews>
</ContributingSubdomain>
<ContributingSubdomain>
<DataUrl>demo.domain.com</DataUrl>
<TimeRange>
<Months>1</Months>
</TimeRange>
<Reach>
<Percentage>35%</Percentage>
</Reach>
<PageViews>
<Percentage>17%</Percentage>
<PerUser>2.9</PerUser>
</PageViews>
</ContributingSubdomain>
<ContributingSubdomain>
<DataUrl>support.domain.com</DataUrl>
<TimeRange>
<Months>1</Months>
</TimeRange>
<Reach>
<Percentage>38%</Percentage>
</Reach>
<PageViews>
<Percentage>6%</Percentage>
<PerUser>3.0</PerUser>
</PageViews>
</ContributingSubdomain>
<ContributingSubdomain>
<DataUrl>forum.domain.com</DataUrl>
<TimeRange>
<Months>1</Months>
</TimeRange>
<Reach>
<Percentage>23%</Percentage>
</Reach>
<PageViews>
<Percentage>3%</Percentage>
<PerUser>2.7</PerUser>
</PageViews>
</ContributingSubdomain>
</ContributingSubdomains>
</TrafficData>
</Alexa>
</UrlInfoResult>
</UrlInfoResponse>
...全文
764 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2005-05-09
  • 打赏
  • 举报
回复
XmlDocument doc=new XmlDocument();
doc.Load(@"e:\1.xml");
//增加XML文件中命名空间
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("xx","http://webservices.amazon.com/AWSAlexa/2004-09-15");

//1.如何取Asin值?
XmlNode node=doc.SelectSingleNode("//xx:Asin",nsmgr);
Console.WriteLine(node.InnerText);

//2.如何取ContributingSubdomains下所有DataUrl值?并填充到一个dataset?
XmlNodeList nodes=doc.SelectNodes("//xx:ContributingSubdomain/xx:DataUrl",nsmgr);

StringBuilder sb=new StringBuilder("<ContributingSubdomain>");
foreach(XmlNode n in nodes)
sb.Append(n.OuterXml);
sb.Append("</ContributingSubdomain>");
Console.WriteLine(sb.ToString());

StringReader sr=new StringReader(sb.ToString());
DataSet ds=new DataSet();
ds.ReadXml(sr);
dataGrid1.DataSource=ds;
xuejia_ 2005-05-09
  • 打赏
  • 举报
回复
谢谢To: LoveCherry的热心解答

去掉 xmlns="http://webservices.amazon.com/AWSAlexa/2004-09-15" 就可以了,不知道是什么原因?

1.
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("data.xml");
XmlNode node1=xmlDoc.SelectSingleNode("descendant::Asin");
Console.WriteLine(node1.InnerText);
2.
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("data.xml");
XmlNode node2=xmlDoc.SelectSingleNode("descendant::ContributingSubdomains");
XmlNodeList xnl1=node2.ChildNodes;
foreach(XmlNode xn1 in xnl1)
{
XmlNodeList xnl2=xn1.ChildNodes;
foreach(XmlNode xn2 in xnl2)
{
if(xn2.Name=="DataUrl")Console.WriteLine(xn2.InnerText);
}
}
mobydick 2005-05-09
  • 打赏
  • 举报
回复
1.XmlNode node1=xmlDoc.SelectSingleNode("//Asin");//要这样写
2.XmlNodeList node2=xmlDoc.DocumentElement.SelectNodes("//ContributingSubdomains/DataUrl"); //这样写
xuejia_ 2005-05-09
  • 打赏
  • 举报
回复
未将对象引用设置到对象的实例

XmlNode node2=xmlDoc.DocumentElement.SelectSingleNode("descendant::ContributingSubdomains");
XmlNodeList xnl1=node2.ChildNodes;

node2 <未定义的值> System.Xml.XmlNode
xnl1 <未定义的值> System.Xml.XmlNodeList
xuejia_ 2005-05-09
  • 打赏
  • 举报
回复
To: LoveCherry
好像不行。。。

xmlDoc.DocumentElement.FirstChild.InnerText; 可以找到 RequestId 的值

XmlNode node1=xmlDoc.SelectSingleNode("descendant::Asin");
string strAsin = node1.InnerText; <-- 未将对象引用到实例

调试时:
node1 <未定义的值> System.Xml.XmlNode
LoveCherry 2005-05-09
  • 打赏
  • 举报
回复
1.
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("data.xml");
XmlNode node1=xmlDoc.SelectSingleNode("descendant::Asin");
Console.WriteLine(node1.InnerText);
2.
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("data.xml");
XmlNode node2=xmlDoc.SelectSingleNode("descendant::ContributingSubdomains");
XmlNodeList xnl1=node2.ChildNodes;
foreach(XmlNode xn1 in xnl1)
{
XmlNodeList xnl2=xn1.ChildNodes;
foreach(XmlNode xn2 in xnl2)
{
if(xn2.Name=="DataUrl")Console.WriteLine(xn2.InnerText);
}
}
singlepine 2005-05-09
  • 打赏
  • 举报
回复
//Transfer xml string to DataSet
string NewLine = System.Environment.NewLine;
string s = ds.Tables[0].Rows[0]["request_data"].ToString().Replace(NewLine,"");
System.IO.StringReader reader = new System.IO.StringReader(s);
xmlds.ReadXml(reader as System.IO.TextReader);
reader.Close();
将string读入xml,而不是xml文件

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧