请教一个如何用C#取XML值得问题

talentmykaka 2014-05-27 06:38:25
XML文档:
<?xml version="1.0" encoding="utf-8"?>
<XTextDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" EditorVersionString="1.1.1820.30544">
<Attributes />
<XElements>
<Element xsi:type="XTextBody" StyleIndex="0">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XString">
<Text>测试</Text>
</Element>
<Element xsi:type="XParagraphFlag" />
<Element xsi:type="XTextTable" NumOfRows="3" NumOfColumns="3">
<ID />
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XTextTableRow">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
</XElements>
</Element>
<Element xsi:type="XTextTableRow">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
</XElements>
</Element>
<Element xsi:type="XTextTableRow">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
<Element xsi:type="XTextTableCell" StyleIndex="1">
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XParagraphFlag" />
</XElements>
</Element>
</XElements>
</Element>
</XElements>
<Columns>
<Element xsi:type="XTextTableColumn">
<Width>624.9167</Width>
</Element>
<Element xsi:type="XTextTableColumn">
<Width>624.9167</Width>
</Element>
<Element xsi:type="XTextTableColumn">
<Width>624.9167</Width>
</Element>
</Columns>
</Element>
<Element xsi:type="XInputField">
<ID>001</ID>
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XString">
<Text>这是测试1</Text>
</Element>
</XElements>
<SpecifyWidth>1181.10242</SpecifyWidth>
<EventExpressions />
<Name>测试一</Name>
<ValueBinding>
<DataSource>Info</DataSource>
<BindingPath>测试一</BindingPath>
</ValueBinding>
<ValidateStyle />
<InnerValue>这是测试1</InnerValue>
<FieldSettings>
<ListSource>
<Items />
</ListSource>
</FieldSettings>
</Element>
<Element xsi:type="XString">
<Text>测试</Text>
</Element>
<Element xsi:type="XParagraphFlag" />
<Element xsi:type="XInputField">
<ID>002</ID>
<Expressions />
<ScriptItems />
<Attributes />
<XElements>
<Element xsi:type="XString">
<Text>这是测试2</Text>
</Element>
</XElements>
<Deleteable>false</Deleteable>
<SpecifyWidth>590.5512</SpecifyWidth>
<EventExpressions />
<Name>测试2</Name>
<ValueBinding>
<DataSource>Info</DataSource>
<BindingPath>测试2</BindingPath>
</ValueBinding>
<ValidateStyle />
<InnerValue>这是测试2</InnerValue>
<ToolTip>测试2</ToolTip>
<FieldSettings>
<ListSource>
<Items />
</ListSource>
</FieldSettings>
</Element>
</XElements>
</Element>
<Element xsi:type="XTextHeader" StyleIndex="0">
<Expressions />
<ScriptItems />
<Attributes />
<XElements />
</Element>
<Element xsi:type="XTextFooter" StyleIndex="0">
<Expressions />
<ScriptItems />
<Attributes />
<XElements />
</Element>
</XElements>
<UserHistories />
<Comments />
<LocalConfig />
<PageSettings />
</XTextDocument>

我现在想获取
<Name>测试2</Name>中的<InnerValue>这是测试2</InnerValue>的值并放在一个TEXTBOX中,应该如获取?谢谢
...全文
190 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
蝶恋花雨 2014-05-30
  • 打赏
  • 举报
回复
XElement xmlDoc = XElement.Load(@"../../XMLFile1.xml");
			   XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
			   var getXML = from p in xmlDoc.Descendants("XElements").Descendants("Element").Descendants("XElements").Descendants("Element")
							where p.Attribute(xsi + "type").Value == "XInputField"
							select new
							{
								 NodeName = p.Element("Name"),
								 NodeValue = p.Element("InnerValue")
							};
					foreach (var item in getXML)
					{
						 item.NodeName.Value; //第一次循环输出 测试一 第二次 测试二
						 item.NodeValue.Value;//第一次循环输出 这是测试1 第二次 这是测试2
					}
蝶恋花雨 2014-05-29
  • 打赏
  • 举报
回复

方法比较笨
XElement xmlDoc = XElement.Load(@"../../XMLFile1.xml");
			   List<LintToXml> lst = new List<LintToXml>();
			   var test = from p in xmlDoc.Descendants("XElements")
						  select new
						  {
							   NodeName = p.Descendants("Name"),
							   NodeValue = p.Descendants("InnerValue")
						  };
			   LintToXml xx = new LintToXml();
			   foreach (var node in test)
			   {
					if (node.NodeName.Count() > 0 && node.NodeValue.Count() > 0)
					{
						 //因为node.NodeName.Count()和node.NodeValue.Count() 的个数是相同的
						 for (int i = 0; i < node.NodeName.Count(); i++)
						 {
							  xx.Name = node.NodeName.ToList()[i].Value;
							  xx.InnerValue = node.NodeValue.ToList()[i].Value;
							  lst.Add(xx);
						 }
					}
			   }
 public class LintToXml
		  {
			   public string Name { get; set; }
			   public string InnerValue { get; set; }
		  }
lst 就是存放了两个值
sunny906 2014-05-28
  • 打赏
  • 举报
回复

            XDocument xml = XDocument.Load(@"D:\1.xml");
            XNamespace xsi = @"http://www.w3.org/2001/XMLSchema-instance";
            XElement note = xml.Element("XTextDocument").Element("XElements").Elements().Single(x => x.Attribute(xsi + "type").Value.Equals("XTextBody"));
            var v = note.Element("XElements").Elements().First(x => x.Attribute(xsi + "type").Value.Equals("XInputField")).Elements();
            string result = v.ElementAt(10).Value;
            Console.WriteLine(result);
宝_爸 2014-05-28
  • 打赏
  • 举报
回复
XmlDocument XDocument XmlSerializer 都可以。 你的这个只去一两个节点,建议使用XDocument,参考下面的帖子,写你自己的代码: http://stackoverflow.com/questions/9185226/best-way-to-query-xdocument-with-linq http://stackoverflow.com/questions/8460464/finding-element-in-xdocument
lxr2010bj 2014-05-27
  • 打赏
  • 举报
回复
XmlDocument xmlBook = new XmlDocument(); xmlBook.Load(文档); //查找跟节点 XmlNode xmlroot = xmlBook.SelectSingleNode("XTextDocument "); //查找节点集 XmlNodeList xnlCheck = xmlBook.SelectSingleNode("XElements").ChildNodes; foreach (XmlNode xn1 in xnlCheck) { if (xn1 .Name == "Name") { 执行你的操作} } 1、 注意节点层次,xml是层次型数据结构 2、中间加你需要的判断就好了
exception92 2014-05-27
  • 打赏
  • 举报
回复
使用 linq to xml 读取文件到内存。 http://blog.csdn.net/duanzi_peng/article/details/24018431
talentmykaka 2014-05-27
  • 打赏
  • 举报
回复
在追加一个问题 如果我分别想取 <Name>测试1</Name>中的<InnerValue>这是测试1</InnerValue>的值并放在一个TEXTBOX1中, <Name>测试2</Name>中的<InnerValue>这是测试2</InnerValue>的值并放在一个TEXTBOX2中 应该如何一次搞定呢?十分感谢

110,536

社区成员

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

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

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