我通过读取一些对象并将它们添加到适当的位置(在xml树结构内)来创建XML文档。为了能够将它添加到适当的位置,我需要父XmlNode,以便我可以调用parentNode.AppendChild(node);
如果我知道其中一个属性的值,我怎样才能获得XmlNode
个对象?
XmlDocument dom = new XmlDocument();
XmlNode parentNode = null;
XmlNode node = dom.CreateElement(item.Title); //item is object that I am writing to xml
XmlAttribute nodeTcmUri = dom.CreateAttribute("tcmUri");
nodeTcmUri.Value = item.Id.ToString();
node.Attributes.Append(nodeTcmUri);
parentNode = ??? - how to get XML node if I know its "tcmUri" attribute value (it is unique value, no other node has same "tcmUri" attribute value)
答案 0 :(得分:1)
您可以使用SelectSingleNode函数和xpath查询执行此操作,如下所示
XmlNode parentNode = dom.SelectSingleNode("descendant::yournodename[@tcmUri='" + item.Id.ToString() + "']");
其中yournodename
必须替换为父元素的节点名称
答案 1 :(得分:0)
试试这个
XmlDocument doc = new XmlDocument();
doc.LoadXml(content);
XmlNodeList list = doc.SelectNodes("mynode");
foreach (XmlNode item in list)
{
if (item.Attributes["tcmUri"].Value == some_value)
{
// do what you want, item is the element you are looking for
}
}
答案 2 :(得分:0)
使用以下代码:
var nodeList = doc.SelectNodes("<Node Name>[@tcmUri = \"<Value>\"]");
if(list.Count>0)
parentNode = list[0];
将<Node Name>
替换为您要创建父节点的节点名称。
将<Value>
替换为您要创建父节点的节点的tcmUri属性值。
答案 3 :(得分:0)
XPath是你的朋友:
string xpath = String.Format("//parentTag[@tcmUri='{0}']", "tcmUriValueHere");
//or in case parent node name (parentTag) may varies
//you can use XPath wildcard:
//string xpath = String.Format("//*[@tcmUri='{0}']", "tcmUriValueHere");
parentNode = dom.SelectSingleNode(xpath)