XML文件的读取

 
/// 
		/// Creates an XmlElement from a stream
		/// 
		/// 
		/// 
 
 
  
  XmlElement pointing to the root of the XML
 
 
		public static XmlElement CreateXmlNode(Stream stream)
		{
			XmlElement xmlElement;
			XmlDocument doc = new XmlDocument();
			using (stream)
			{
				doc.Load(stream);
			}
			xmlElement = doc.DocumentElement;
			return xmlElement;
		}

 

本段代码用传入的数据流生成XML文档(XmlDocument),并取得文档的根(DocumentElement)。

/// 
		/// Read the API endpoints
		/// 
		public static Hashtable ReadEndpoints(XmlNode root)
		{
			if (root == null)
			{
				throw new ArgumentNullException("node");
			}
			Hashtable endpoints = new Hashtable();

			XmlNodeList environmentNodes = root.SelectNodes("wsdl/environment");
			foreach (XmlNode environmentNode in environmentNodes)
			{
				string environment = environmentNode.SelectSingleNode("@name").Value;
				foreach (XmlNode portNode in environmentNode.SelectNodes("port"))
				{
					bool isThreeToken = IsThreeToken(portNode);
					XmlNode portNameAttributeNode = portNode.SelectSingleNode("@name");
					LogIfNull(portNameAttributeNode, "port name attribute not found in endpoints");
					if (NonNull(portNameAttributeNode))
					{
						string port = portNameAttributeNode.Value;
						string url = portNode.InnerText;
						string endpointKey = GetEndpointKey(environment, port, isThreeToken);
						Endpoint endpoint = new Endpoint(environment, port, isThreeToken, url);
						endpoints.Add(endpointKey, endpoint);
						if (log.IsDebugEnabled)
						{
							log.Debug(MessageResources.GetMessage("ENDPOINT_FOUND")+ "'" + endpointKey + "', environment: '" + environment + "', port: '" + port + "'");
						}
					}
				}
			}

			return endpoints;
		}

 

本段代码从传入的根节点中读取各接点的属性(attribute)和值(InnerText)

其中值得注意的是:

1)XmlNodeList environmentNodes = root.SelectNodes("wsdl/environment");

这表示从根节点一直读到environment节点,并获得environment的列表。

备注:节点路径为Root -> wsdl -> enviroment -> port

 

2)string environment = environmentNode.SelectSingleNode("@name").Value;

可以获得该节点属性名为name的属性值。

 

3)string url = portNode.InnerText;

获得节点的值

 

两端代码结合使用如下:

XmlNode defaultEndpointsNode = Utils.CreateXmlNode(DefaultEndpointsStream);
			this.endpoints = ConfigSectionParser.ReadEndpoints(defaultEndpointsNode);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值