如何根据子xml的值获取父xml

时间:2013-10-29 05:21:07

标签: c# .net xml

我有一个要求,例如,我从xml中检索了id和供应商,其中包含40多个ID和Suppliers.Now我只需要获取特定Id和Supplier的父节点并将其附加到另一个xml。 / p>

然而我设法检索ID和供应商,现在我想在c#中获取整个xml。任何帮助都会很明显..

c#中

  var action = xmlAttributeCollection["id"];
  xmlActions[i] = action.Value;
  var fileName = xmlAttributeCollection["supplier"];
  xmlFileNames[i] = fileName.Value;

这是我用来获取ID和供应商的代码。

3 个答案:

答案 0 :(得分:2)

您可能希望更具体地了解如何遍历Xml树,并提供变量类型,以便我们更清楚地了解问题。说这是我的答案:

假设items [i]是一个XmlNode,在这种情况下我们正在使用“hoteId”节点,有一个名为XmlNode.ParentNode的属性返回节点的直接祖先,如果它是一个根则返回null节点

XmlNode currentNode = items[i] as XmlNode; //hotelId
XmlNode parentNode = currentNode.ParentNode; //hotelDetail
string outerXml = parentNode.OuterXml; //returns a string representation of the entire parent node

完整示例:

XmlDocument doc = new XmlDocument();
doc.Load("doc.xml");

XmlNode hotelIdNode = doc.SelectSingleNode("hoteldetail//hotelId"); //Find a hotelId Node
XmlNode hotelDetailNode = hotelIdNode.ParentNode; //Get the parent node
string hotelDetailXml = hotelDetailNode.OuterXml; //Get the Xml as a string

答案 1 :(得分:0)

您可以获得如下的父XML:XmlNode node = doc.SelectSingleNode(“// hoteldetail”); node.innerXml;

答案 2 :(得分:0)

我认为你最好不要使用linq。

var xDoc = XDocument.Parse(yourXmlString);
foreach(var xElement in xDoc.Descendants("hoteldetail"))
{
    //this is your <hoteldetail>....</hoteldetail>
    var hotelDetail = xElement;
    var hotelId = hotelDetail.Element("hotelId");
    //this is your id
    var id = hotelId.Attribute("id").Value;
    //this is your supplier
    var supplier = hotelId.Attribute("supplier").Value;

    if (id == someId && supplier == someSupplier)
         return hotelDetail;
}