Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#通过特定属性值获取XML元素的代码_C#_Xml - Fatal编程技术网

C#通过特定属性值获取XML元素的代码

C#通过特定属性值获取XML元素的代码,c#,xml,C#,Xml,我通过读取一些对象并将它们添加到适当的位置(在XML树结构中)来创建XML文档。为了能够将其添加到适当的位置,我需要父XmlNode,以便调用parentNode.AppendChild(节点) 如果我知道对象的某个属性的值,如何获取该对象 XmlDocument dom = new XmlDocument(); XmlNode parentNode = null; XmlNode node = dom.CreateElement(item.Title); //item is object th

我通过读取一些对象并将它们添加到适当的位置(在XML树结构中)来创建XML文档。为了能够将其添加到适当的位置,我需要父XmlNode,以便调用
parentNode.AppendChild(节点)

如果我知道对象的某个属性的值,如何获取该对象

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)
试试这个

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
                     }
                }
使用以下代码:

var nodeList = doc.SelectNodes("<Node Name>[@tcmUri = \"<Value>\"]");
if(list.Count>0)
 parentNode = list[0];
var nodeList=doc.SelectNodes(“[@tcmUri=\“\”\”]);
如果(列表计数>0)
parentNode=list[0];
替换为要作为父节点的节点名。
替换为要成为父节点的节点的tcmUri属性值。

您可以使用SelectSingleNode函数和xpath查询执行此操作,如下所示

XmlNode parentNode = dom.SelectSingleNode("descendant::yournodename[@tcmUri='" + item.Id.ToString() + "']");
其中,
yournodename
必须替换为父元素的节点名

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)

对于复杂的XML查询,您应该考虑使用.@谢谢。我还没有使用XPath,它在这种情况下非常有用。