Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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# 在C中查找特定值的所有子节点#_C#_Xml_Search_Xmlnode - Fatal编程技术网

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";
    }
}