如何找到合适的元素 [英] How to find the right Element

查看:78
本文介绍了如何找到合适的元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Linq to XML的新手(但是使用了Linq to SQL)。经过一些研究后,我为下面的XML创建了一些代码 

<?xml version =" 1.0"?> 
< terms xmlns:xsi =" http://www.w3.org/"的xmlns:XSD = QUOT; HTTP://www.w3.org/"名称= QUOT;酒店与QUOT;>
< hotels>
< hotel name =" Hotel 1">
< rooms>
< room reference =" 123">
< availableFrom />
< department>外部< / department>
< roomofweek>是< / roomofweek>
< price_text> 50< / price_text>
< priority> Top< / priority>
< room_number> 01< / room_number>
< brochure />
< room_type>标准< / room_type>
< rooms />
< pictures>
< picture name =" Interior">
< filename> 1.jpg< / filename>
< / picture>
< picture name ="浴室">
< filename> 3.jpg< / filename>
< / picture>
< picture name =" Hall way">
< filename> 2.jpg< / filename>
< / picture>
< picture name =" Balcony">
< filename> 5.JPG< / filename>
< / picture>
< / pictures>
< / room>
< room reference =" a123">
< availableFrom />
< department>外部< / department>
< roomofweek>是< / roomofweek>
< price_text> 100< / price_text>
< priority> Top< / priority>
< room_number> 1000< / room_number>
< brochure />
< room_type> Executive< / room_type>
< rooms />
< pictures>
< picture name =" Interior">
< filename> 1.jpg< / filename>
< / picture>
< picture name ="浴室">
< filename> 3.jpg< / filename>
< / picture>
< picture name =" Hall way">
< filename> 2.jpg< / filename>
< / picture>
< picture name =" Balcony">
< filename> 5.JPG< / filename>
< / picture>
< / pictures>
< / room>
< / rooms>
< / hotel>
< hotel name ="酒店2">
< rooms>
< room reference =" B3456">
< availableFrom />
< department>内部< / department>
< roomofweek> No< / roomofweek>
< price_text> 40< / price_text>
< priority> Med< / priority>
< room_number> 02< / room_number>
< brochure />
< room_type>经济< / room_type>
< rooms />
< pictures>
< picture name =" Interior">
< filename> 1.jpg< / filename>
< / picture>
< picture name ="浴室">
< filename> 3.jpg< / filename>
< / picture>
< picture name =" Hall way">
< filename> 2.jpg< / filename>
< / picture>
< picture name =" Balcony">
< filename> 5.JPG< / filename>
< / picture>
< / pictures>
< / room>
< / rooms>
< / hotel>
< / hotels>
< / terms>

读取/加载文件

 XDocument Xdoc = XDocument。加载(XMLFilePath); 


现在我想从所有单独的房间获得所有price_text:


< pre class ="prettyprint"> foreach(var i in Xdoc.Descendants(" hotels"))
{
if(i.Element(" price_text")。Value ==" price_text" )

{
//做一些数据操作
}
}




但是我总是得到"附加信息:对象引用未设置为对象的实例。"$


想法是获取所有酒店和每个酒店它有很多房间(可能是100个),并执行一些相关的任务。我怎么能解决这个问题?


解决方案

Hi Pure,


有多种方法可以读取节点值。


下面是一个或两个,请查看以下链接,了解LINQ to XML或SQL上的其他选项或更多内容。

 // LINQ to XML 
XDocument doc = XDocument.Load(" Sample.xml");
IEnumerable< XElement> 。元素= doc.Descendants()元素(" PRICE_TEXT");

foreach(元素中的var PriceText)
{
string price_text = PriceText.Value;
Console.WriteLine(price_text);
}

//链接到SQL
var elements2 =来自doc.Descendants()中的PriceText。元素(" price_text")
选择PriceText;

foreach(元素2中的var PriceText)
{
string price_text = PriceText.Value;
Console.WriteLine(price_text);
}

Console.ReadKey();

参考:  LINQ to SQL


  &NBSP; &NBSP; &NBSP;    XmlDocument类


  &NBSP; &NBSP; &NBSP;    101 LINQ Sample < a href ="https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx\"target ="_ blank"title ="阅读XML文档的许多其他方法">


谢谢


Vikas 


Im new with Linq to XML (but have used Linq to SQL). After some research i have created some code for the below XML 

<?xml version="1.0"?>
<terms xmlns:xsi="http://www.w3.org/" xmlns:xsd="http://www.w3.org/" name="Hotels">
	<hotels>
		<hotel name="Hotel 1">
			<rooms>
				<room reference="123">
					<availableFrom />
					<department>External</department>
					<roomofweek>Yes</roomofweek>
					<price_text>50</price_text>
					<priority>Top</priority>
					<room_number>01</room_number>
					<brochure />
					<room_type>Standard</room_type>
					<rooms />
					<pictures>
						<picture name="Interior">
							<filename>1.jpg</filename>
						</picture>
						<picture name="Bathroom">
							<filename>3.jpg</filename>
						</picture>
						<picture name="Hall way">
							<filename>2.jpg</filename>
						</picture>
						<picture name="Balcony">
							<filename>5.JPG</filename>
						</picture>
					</pictures>
				</room>
				<room reference="a123">
					<availableFrom />
					<department>External</department>
					<roomofweek>Yes</roomofweek>
					<price_text>100</price_text>
					<priority>Top</priority>
					<room_number>1000</room_number>
					<brochure />
					<room_type>Executive</room_type>
					<rooms />
					<pictures>
						<picture name="Interior">
							<filename>1.jpg</filename>
						</picture>
						<picture name="Bathroom">
							<filename>3.jpg</filename>
						</picture>
						<picture name="Hall way">
							<filename>2.jpg</filename>
						</picture>
						<picture name="Balcony">
							<filename>5.JPG</filename>
						</picture>
					</pictures>
				</room>
			</rooms>
		</hotel>
		<hotel name=" Hotel 2">
			<rooms>
				<room reference="B3456">
					<availableFrom />
					<department>Internal</department>
					<roomofweek>No</roomofweek>
					<price_text>40</price_text>
					<priority>Med</priority>
					<room_number>02</room_number>
					<brochure />
					<room_type>Economy</room_type>
					<rooms />
					<pictures>
						<picture name="Interior">
							<filename>1.jpg</filename>
						</picture>
						<picture name="Bathroom">
							<filename>3.jpg</filename>
						</picture>
						<picture name="Hall way">
							<filename>2.jpg</filename>
						</picture>
						<picture name="Balcony">
							<filename>5.JPG</filename>
						</picture>
					</pictures>
				</room>
			</rooms>
		</hotel>
	</hotels>
</terms>

To read/load the file

XDocument Xdoc = XDocument.Load(XMLFilePath);

Now i would like to get all the price_text from all individual room:

foreach (var i in Xdoc.Descendants("hotels"))
{
  if (i.Element("price_text").Value == "price_text")

    {
        // Do some data operations
    }
}


But i always get "Additional information: Object reference not set to an instance of an object."?

The idea is to get all the hotels and each individual hotel which has many rooms (which could be 100's) and perform some relevant tasks. How could i resolve this issue?

解决方案

Hi Pure,

There are number of ways to read the node values.

below is one or tow among, check the below links for other options or more on LINQ to XML or SQL.

// LINQ to XML
XDocument doc = XDocument.Load("Sample.xml");
IEnumerable<XElement> elements=doc.Descendants().Elements("price_text");

foreach (var PriceText in elements)
{
    string price_text = PriceText.Value;
    Console.WriteLine(price_text);
}

// LINK to SQL
var elements2 = from PriceText in doc.Descendants().Elements("price_text")
    select PriceText;

foreach (var PriceText in elements2)
{
    string price_text = PriceText.Value;
    Console.WriteLine(price_text);
}

Console.ReadKey();

Refer: LINQ to SQL

          XmlDocument Class

          101 LINQ Samples

Thanks

Vikas 


这篇关于如何找到合适的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆