C# 在C中查找特定值的所有子节点#
您可以使用以下C# 在C中查找特定值的所有子节点#,c#,xml,search,xmlnode,C#,Xml,Search,Xmlnode,您可以使用以下XPath列出所有imf标记,然后使用一个简单的Linq命令查找所需内容: int pid = 2; XDocument xDoc = XDocument.Parse(xml); //Load var name = xDoc.Descendants("myself") .First(m => (int)m.Element("pid") == pid) .Element("name") .Value;
XPath
列出所有imf
标记,然后使用一个简单的Linq
命令查找所需内容:
int pid = 2;
XDocument xDoc = XDocument.Parse(xml); //Load
var name = xDoc.Descendants("myself")
.First(m => (int)m.Element("pid") == pid)
.Element("name")
.Value;
你可以叫我老式,但你可以用一个,例如:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "file1.xml");
var resNodes = xmlDoc.SelectNodes("//myself");
XmlNode res = null;
var val = textBox1.Text;
var item = from XmlNode x in resNodes
select x;
foreach (var nodP in item) {
foreach (XmlNode nod in nodP.ChildNodes) {
if (nod.InnerText == val) {
res = nodP;
}
}
}
if (res == null)
// not found!
;
else
// show the result
;
stringxml=
@"
1.
abc
2.
efg
";
使用System.Xml;
....
XmlDocument XmlDocument=新的XmlDocument();
LoadXml(xml);
//将下面字符串中的“2”替换为所需的pid
XmlNode XmlNode=
xmlDocument.DocumentElement.SelectSingleNode(“我自己/name[../pid=2]”;
//xmlNode包含efg XmlElement。例如:
字符串名称=xmlNode.Value;
如果它可以匹配多个节点,例如,可能有多个
元素,且子元素
设置为2,请改用以下选项:
string xml =
@"<main>
<myself>
<pid>1</pid>
<name>abc</name>
</myself>
<myself>
<pid>2</pid>
<name>efg</name>
</myself>
</main>";
using System.Xml;
....
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
// Replace "2" in the string below with the desired pid
XmlNode xmlNode =
xmlDocument.DocumentElement.SelectSingleNode("myself/name[../pid=2]");
// xmlNode contains the <name>efg</name> XmlElement. For example:
string name = xmlNode.Value;
foreach(XmlNode-XmlNode-in
xmlDocument.DocumentElement.SelectNodes(“我自己/name[../pid=2]”)
{
//xmlNode包含匹配的元素
}
在这两种情况下,都可以使用属性从中提取值
将静态
itemIndex
初始化为1,并进一步像itemIndex++
(用于下一个)和itemIndex--
(用于上一个)那样使用它。XmlDocument doc=new XmlDocument();
FileStream fs=newfilestream(rootXMLPath,FileMode.Open,FileAccess.Read);
文件加载(fs);
XmlNode节点=doc.DocumentElement代码>
nodeName=“/main/imf”代码>
var child1=node.SelectSingleNode(nodeName).ChildNodes[0].FirstChild.InnerXml;
var child2=node.SelectSingleNode(nodeName).ChildNodes[0].LastChild.InnerXml;
var child3=node.SelectSingleNode(nodeName).ChildNodes[1].FirstChild.InnerXml;
var child4=node.SelectSingleNode(nodeName).ChildNodes[1].LastChild.InnerXml
将插入符号放在XDocument.Parse
上,然后按F1键阅读文档,特别是参数说明。使用XML字符串调用XDocument.Parse(),使用XDocument.Load()和文件名。请问我应该在foreach(XmlNode中的XmlNode xn)中放入什么?如果我想在textName.Text中显示xmlNode?我在答案中添加了另一个case,如果它可以匹配多个元素。我假设我应该将其放在foreach>>textETA.Text=xmlNode中;但它表示无法将system.xml.xmlnode转换为字符串。请使用xmlnode的Value属性。请参阅以获取有关XmlNode的帮助。这不是我的原始代码吗?这正是问题所在?如果使用XDocument.Parse()
并解析文件路径,则会出现该错误。要从文件中获取xDoc,您应该使用XDocument.Load()
。我没有检查查询的实现,我只是解释了为什么会出现你要求的错误。哦,我明白了。谢谢。我一开始没注意到。但再次感谢您的解释。@sarabrown,请参阅我的更新,我建议我修复您的姓名查询。嗯,至少,它在.NET4.5.im上使用MicrosoftVisualStudio2010运行良好。为什么说CultureInfo不存在?我搞错了。见我的帖子。我已经把这篇文章和error@Sarabrown要从文件加载,请使用xdocument的加载方法。另请参见编辑后的答案
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "file1.xml");
var resNodes = xmlDoc.SelectNodes("//myself");
XmlNode res = null;
var val = textBox1.Text;
var item = from XmlNode x in resNodes
select x;
foreach (var nodP in item) {
foreach (XmlNode nod in nodP.ChildNodes) {
if (nod.InnerText == val) {
res = nodP;
}
}
}
if (res == null)
// not found!
;
else
// show the result
;
string xml =
@"<main>
<myself>
<pid>1</pid>
<name>abc</name>
</myself>
<myself>
<pid>2</pid>
<name>efg</name>
</myself>
</main>";
using System.Xml;
....
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
// Replace "2" in the string below with the desired pid
XmlNode xmlNode =
xmlDocument.DocumentElement.SelectSingleNode("myself/name[../pid=2]");
// xmlNode contains the <name>efg</name> XmlElement. For example:
string name = xmlNode.Value;
foreach(XmlNode xmlNode in
xmlDocument.DocumentElement.SelectNodes("myself/name[../pid=2]"))
{
// xmlNode contains the matching <name> element
}
private void previousList_Click(object sender, EventArgs e)
{
pid = 14;
XDocument xDoc = XDocument.Load(@"C:\Users\HDAdmin\Documents\Fatty\SliceEngine\SliceEngine\bin\Debug\simpan.xml");
var name = xDoc.Root
.Descendants("myself")
.FirstOrDefault(e => e.Element("pid")
.Value
.Equals(pid.ToString(CultureInfo.InvariantCulture)))
.Element("name")
.Value;
textETA.Text = name;
}
public class simpman
{
private static XElement root = XElement.Load("Simpman.xml");
public static string GetItem(int index)
{
XElement item =
(from element in root.Elements("myself")
where (int)element.Element("pid") == index
select element.Element("name")).SingleOrDefault();
return item != null ? item.Value : "Please check the Index";
}
}