使用C#按XML文档的名称访问子节点

时间:2015-08-07 19:53:38

标签: c# xml

我有一种情况,XML文档包含类似于以下内容的东西,但是" Block"元素被更改了,在应用程序中,我通过使用GetElementsByTagName(" Amount")[0] .InnerText来访问in的值,因为它是第一次出现" Amount&#34 ;。那么"块"的顺序改变了,"金额"由GetElementsByTagName返回的仍然是第一次出现,但我想要" Amount"在" Block1"总是被退回。我如何在C#中实现这一目标?

之前:

<Response xmlns="testsite.com/schema/TestService/2015-01-01">
  <Block1>
     <Amount>$5.00</Amount>
  </Block1>
  <Block2>
     <Amount>$0.00</Amount>
  </Block2>
  <Block3>
     <Amount>$0.00</Amount>
  </Block3>
</Response>

后:

<Response xmlns="testsite.com/schema/TestService/2015-01-01">
  <Block2>
     <Amount>$0.00</Amount>
  </Block2>
  <Block3>
     <Amount>$0.00</Amount>
  </Block3>
  <Block1>
     <Amount>$5.00</Amount>
  </Block1>
</Response>

C#:

XmlDocument doc = new XmlDocument();
doc.LoadXml(response);

string amount = doc.GetElementsByTagName("Amount")[0].InnerText;

3 个答案:

答案 0 :(得分:2)

  

然而,在我的根元素中,我有<Response xmlns="testsite.com/schema/TestService/2015-01-01">

之类的东西

这是xml的默认xmlnamespece。使用您提供的新信息

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("ns", "testsite.com/schema/TestService/2015-01-01");

var value = doc.SelectSingleNode("/ns:Response/ns:Block1/ns:Amount", mgr).InnerText;

答案 1 :(得分:0)

您可以使用方法session.query(Score).join(School).filter(School.SchoolName == 'RandomName') 和XPath表达式来访问所需的数据。您还需要使用命名空间管理器并导入正确的命名空间:

SelectSingleNode

无论Block1在哪里 - 第一,第二或第三个元素,这样的代码都会找到正确的值。方法var namespaceManager= new XmlNamespaceManager(doc.NameTable); namespaceManager.AddNamespace("a", "testsite.com/schema/TestService/2015-01-01"); var xmlNode = doc.SelectSingleNode("/a:Response/a:Block1/a:Amount", namespaceManager); var value = node.InnerText; // prints $5.00 返回与表达式匹配的第一个节点,因此如果XML中有多个Block1元素,那么结果可能不是您期望的结果

答案 2 :(得分:0)

从System.Xml.Linq开始;您需要加载xml文件,然后解析文档。例如,

var doc = XDocument.Load("file.xml");
IEnumerable<XElement> elements = doc.Descendants(tagNameHere);

如果你想创建这些后代的列表,你可以通过这样的方式访问这些元素:

List<string> myElements = new List<string>();
XElement element = elements.ElementAt(0);
myElements.Add(element.Value);

这只是为了让你入门。我建议你在这里阅读:

https://msdn.microsoft.com/en-us/library/system.xml.linq(v=vs.110).aspx