我怎样才能只获得第一个子节点?
How can I get only first childnode?
<Setup>
<group id="test1">
<group id="testist1">
<value>Exam1</value>
<value>Exam2</value>
</group2>
</group>
<group id="test2">
<group id="testist2">
<value>Exam1</value>
<value>Exam2</value>
</group>
</group>
</Setup>
我只想获取第一个子节点的属性。 -> 测试 1、测试 2
所以我尝试了这段代码,但打印了每个属性。
xmlNode.ChildNodes[0].Attributes[0].Value
如何只获取第一个子节点?谢谢!
这是我的完整代码。
private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList xNodeList;
if (xmlNode.HasChildNodes)
{
xNodeList = xmlNode.ChildNodes;
for (int x = 0; x <= xNodeList.Count - 1; x++)
{
xNode = xmlNode.ChildNodes[x];
string nodetext = xNode.Name;
if (!nodetext.Contains("text"))
{
if (xNode.Attributes.Count > 0)
{
for (int i = 0; i < xNode.Attributes.Count; i++)
{
lblExam.Text += xmlNode.ChildNodes[0].Attributes[0].Value;
}
}
}
treeNode.Nodes.Add(new TreeNode(nodetext));
tNode = treeNode.Nodes[x];
addTreeNode(xNode, tNode);
}
}
}
您可能会考虑使用 System.Xml.Linq
名称空间,该名称空间旨在搜索 Xml 层次结构。如果您不熟悉,这里有两个搜索示例,可让您从层次结构中准确选择您想要的内容。现在,我不是 100% 确定你在问什么,所以如果我错过了标记,请在评论中告诉我,我会尝试调整示例,但无论你在寻找什么 - 单个属性或其他任何东西,你可以使用 System.Xml.Linq
.
找到它
using System;
using System.Linq;
using System.Xml.Linq;
namespace xml_get_first_node
{
class Program
{
static void Main(string[] args)
{
XElement searchResult;
XElement xsource = XElement.Parse(source);
// EXAMPLE: Get the first group under Setup
Console.WriteLine("EXAMPLE: Get the first group under Setup");
searchResult = xsource.Elements("group").First();
Console.WriteLine(searchResult.ToString());
Console.WriteLine();
// EXAMPLE: Get the group with id="test2"
Console.WriteLine("EXAMPLE: Get the group with id='test2'");
searchResult =
xsource.Descendants()
.Where(xel=>(xel.Attribute("id") != null) && (xel.Attribute("id").Value == "test2")).First();
Console.WriteLine(searchResult.ToString());
}
const string source = @"
<Setup>
<group id=""test1"">
<group id=""testist1"">
<value>Exam1</value>
<value>Exam2</value>
</group>
</group>
<group id=""test2"">
<group id=""testist2"">
<value>Exam1</value>
<value>Exam2</value>
</group>
</group>
</Setup>";
}
}
<Setup>
<group id="test1">
<group id="testist1">
<value>Exam1</value>
<value>Exam2</value>
</group2>
</group>
<group id="test2">
<group id="testist2">
<value>Exam1</value>
<value>Exam2</value>
</group>
</group>
</Setup>
我只想获取第一个子节点的属性。 -> 测试 1、测试 2
所以我尝试了这段代码,但打印了每个属性。
xmlNode.ChildNodes[0].Attributes[0].Value
如何只获取第一个子节点?谢谢!
这是我的完整代码。
private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList xNodeList;
if (xmlNode.HasChildNodes)
{
xNodeList = xmlNode.ChildNodes;
for (int x = 0; x <= xNodeList.Count - 1; x++)
{
xNode = xmlNode.ChildNodes[x];
string nodetext = xNode.Name;
if (!nodetext.Contains("text"))
{
if (xNode.Attributes.Count > 0)
{
for (int i = 0; i < xNode.Attributes.Count; i++)
{
lblExam.Text += xmlNode.ChildNodes[0].Attributes[0].Value;
}
}
}
treeNode.Nodes.Add(new TreeNode(nodetext));
tNode = treeNode.Nodes[x];
addTreeNode(xNode, tNode);
}
}
}
您可能会考虑使用 System.Xml.Linq
名称空间,该名称空间旨在搜索 Xml 层次结构。如果您不熟悉,这里有两个搜索示例,可让您从层次结构中准确选择您想要的内容。现在,我不是 100% 确定你在问什么,所以如果我错过了标记,请在评论中告诉我,我会尝试调整示例,但无论你在寻找什么 - 单个属性或其他任何东西,你可以使用 System.Xml.Linq
.
using System;
using System.Linq;
using System.Xml.Linq;
namespace xml_get_first_node
{
class Program
{
static void Main(string[] args)
{
XElement searchResult;
XElement xsource = XElement.Parse(source);
// EXAMPLE: Get the first group under Setup
Console.WriteLine("EXAMPLE: Get the first group under Setup");
searchResult = xsource.Elements("group").First();
Console.WriteLine(searchResult.ToString());
Console.WriteLine();
// EXAMPLE: Get the group with id="test2"
Console.WriteLine("EXAMPLE: Get the group with id='test2'");
searchResult =
xsource.Descendants()
.Where(xel=>(xel.Attribute("id") != null) && (xel.Attribute("id").Value == "test2")).First();
Console.WriteLine(searchResult.ToString());
}
const string source = @"
<Setup>
<group id=""test1"">
<group id=""testist1"">
<value>Exam1</value>
<value>Exam2</value>
</group>
</group>
<group id=""test2"">
<group id=""testist2"">
<value>Exam1</value>
<value>Exam2</value>
</group>
</group>
</Setup>";
}
}