如何根据子 xml 的值获取父 xml
本文关键字:xml 获取 何根 | 更新日期: 2023-09-27 18:37:09
我有一个要求,比如,我从具有 40 多个 ID 和供应商的 xml 中检索了 id 和供应商。现在我所需要的只是想要获取特定 ID 和供应商的父节点并将其附加到另一个 xml。
但是我设法检索了ID和供应商,现在我想在c#中获取整个xml。任何帮助都是可观的。
C#
var action = xmlAttributeCollection["id"];
xmlActions[i] = action.Value;
var fileName = xmlAttributeCollection["supplier"];
xmlFileNames[i] = fileName.Value;
这是我用来获取ID和供应商的代码。
您可能希望更具体地了解如何遍历 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
你可以得到父XML,如:XmlNode节点=doc。SelectSingleNode("//hoteldetail");node.innerXml;
我认为你最好使用 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;
}