c#中基于父xml属性的ChildNodes

本文关键字:属性 ChildNodes xml 于父 | 更新日期: 2023-09-27 18:12:39

这是我的Xml。

<SCat>
  <S SId="1" SName="M" FName="MA">
    <Cat>
      <C CId="2" CName="CAS" FName="c-a" />
      <C CId="3" CName="DAC" FName="d-a" />
    </Cat>
  </S>
  <S SId="2" SName="I" FName="IA">
    <Cat>
      <C CId="2" CName="CAS" FName="c-a" />
      <C CId="3" CName="DAC" FName="d-a" />
    </Cat>
  </S>
  <S SId="3" SName="D" FName="DA">
    <Cat>
      <C CId="2" CName="CAS" FName="c-a" />
      <C CId="3" CName="DAC" FName="d-a" />
    </Cat>
  </S>
</SCat>

我写了这段代码。

int Scode = 1;
dsS = new DataSet();
dsS.ReadXml(HttpContext.Current.Server.MapPath(Path));

这就是我被困的地方。我想得到所有的"猫"在Datatable属性"SId"= 1。

谢谢

c#中基于父xml属性的ChildNodes

使用下面的XPATH,您将获得SId ='1'

的所有子节点
/SCat/S[@SId='1']/Cat

应该使用XmlDocument对象加载整个文档,然后提供节点路径和属性选择器。这在MSDN (link1)上都有很好的记录。以下是该站点的代码片段:

清单1

using System;
using System.IO;
using System.Xml;
public class Sample {
  public static void Main() {
    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<book xmlns:bk='urn:samples' bk:ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "</book>");
    XmlNode root = doc.FirstChild;
    //Create a new attribute. 
    string ns = root.GetNamespaceOfPrefix("bk");
    XmlNode attr = doc.CreateNode(XmlNodeType.Attribute, "genre", ns);
    attr.Value = "novel";
    //Add the attribute to the document.
    root.Attributes.SetNamedItem(attr);
    Console.WriteLine("Display the modified XML...");
    doc.Save(Console.Out);
  }
}
清单2 (link2)
XElement root = XElement.Load("PurchaseOrder.xml");
IEnumerable<XElement> address =
    from el in root.Elements("Address")
    where (string)el.Attribute("Type") == "Billing"
    select el;
foreach (XElement el in address)
    Console.WriteLine(el);

希望这将帮助。问候,AB