.net 什么';获取XmlElement的顶级文本的最简单方法是什么?
假设我有一些.net 什么';获取XmlElement的顶级文本的最简单方法是什么?,.net,xml,vb.net,.net,Xml,Vb.net,假设我有一些xmlement;让我们称之为元素。如果要获取该元素的所有子节点,可以调用element.ChildNodes。如果我想要元素及其所有子元素的文本,那么我可以使用element.InnerText 但是,假设我有一些XML如下所示: <TopElement attr1="value1" attr2="value2"> This is the text I want. <ChildElement1>This is text I don't wan
xmlement
;让我们称之为元素
。如果要获取该元素的所有子节点,可以调用element.ChildNodes
。如果我想要元素及其所有子元素的文本,那么我可以使用element.InnerText
但是,假设我有一些XML如下所示:
<TopElement attr1="value1" attr2="value2">
This is the text I want.
<ChildElement1>This is text I don't want.</ChildElement1>
<ChildElement2>This is more text I don't want.</ChildElement2>
</TopElement>
但我觉得这很傻。肯定有更好的办法吗
编辑:很抱歉,我最初没有指定这一点:我正在寻找一个不涉及LINQ的解决方案(我们在.NET 2.0的黑暗时代)。从技术上讲,TopElement中的文本是一个childnode
class Program
{
static string xml = @"<Top>Text<child/><child/></Top>";
static void Main(string[] args)
{
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xml);
Console.WriteLine(xdoc.DocumentElement.ChildNodes[0].Value);
Console.ReadLine();
}
}
类程序
{
静态字符串xml=@“文本”;
静态void Main(字符串[]参数)
{
XmlDocument xdoc=新的XmlDocument();
LoadXml(xml);
Console.WriteLine(xdoc.DocumentElement.ChildNodes[0].Value);
Console.ReadLine();
}
}
从技术上讲,TopElement中的文本是一个子节点
class Program
{
static string xml = @"<Top>Text<child/><child/></Top>";
static void Main(string[] args)
{
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xml);
Console.WriteLine(xdoc.DocumentElement.ChildNodes[0].Value);
Console.ReadLine();
}
}
类程序
{
静态字符串xml=@“文本”;
静态void Main(字符串[]参数)
{
XmlDocument xdoc=新的XmlDocument();
LoadXml(xml);
Console.WriteLine(xdoc.DocumentElement.ChildNodes[0].Value);
Console.ReadLine();
}
}
即使所需的文本位于两个子节点之间,这也会起作用
即使所需的文本位于两个子节点之间,这也会起作用。您可以使用专门查找文本节点的XPath表达式(很抱歉C#)
(其中
doc
是包含XML的XmlDocument
)您可以使用专门查找文本节点的XPath表达式(对于C#很抱歉)
(其中,
doc
是一个包含XML的XmlDocument
)下面是一个示例,它将为您提供请求文本:
static void Main(string[] args)
{
var document = XDocument.Load("../../TestXmlFile.xml");
if(document.Root == null) return;
var text = ((XText) document.Root.FirstNode).Value;
Console.WriteLine(text);
}
下面是一个示例,它将为您提供请求文本:
static void Main(string[] args)
{
var document = XDocument.Load("../../TestXmlFile.xml");
if(document.Root == null) return;
var text = ((XText) document.Root.FirstNode).Value;
Console.WriteLine(text);
}
我原以为使用.NET1.0或1.1将是黑暗时代我会说.NET 1.0和1.1是冰河时代,2.0是黑暗时代,3.5是文艺复兴时期,4.0是某种科幻幻想世界。我会认为使用.NET 1.0或1.1是黑暗时代我会说.NET 1.0和1.1是冰河时代,2.0是黑暗时代,3.5是文艺复兴时期,4.0是某种科幻幻想世界。我看到这个答案的主要问题是它假设ChildNodes[0]是文本。我不确定是否会有顶级文本;我想看看是否有,如果有,一定要得到。我认为您提供的解决方案没有任何问题。InnerText获取所有子节点的文本。如果您想要特定childNode的文本,则必须遍历它们才能找到它。我看到这个答案的主要问题是,它假定ChildNodes[0]将是文本。我不确定是否会有顶级文本;我想看看是否有,如果有,一定要得到。我认为您提供的解决方案没有任何问题。InnerText获取所有子节点的文本。如果你想要一个特定的子节点的文本,你必须遍历它们才能找到它;但是,它确实假设如果有顶级文本,它将是第一个子文本。考虑这样的事情:不想要的文本文本。在这种情况下,您的代码将丢失想要的文本。如果文本可以位于子节点之间的任何位置,则需要迭代,您的解决方案非常好;但是,它确实假设如果有顶级文本,它将是第一个子文本。考虑这样的事情:不想要的文本文本。在这种情况下,您的代码将丢失想要的文本。如果文本可以位于子节点之间的任何位置,则需要迭代,并且您的解决方案非常好。这正是我所寻找的。美好的这正是我想要的。美好的
XmlNode nodeYouWant = document.DocumentElement.SelectSingleNode("./text()");
XmlText text = doc.SelectSingleNode("/TopElement/text()") as XmlText;
if (text != null)
{
Console.WriteLine(text.Value);
}
static void Main(string[] args)
{
var document = XDocument.Load("../../TestXmlFile.xml");
if(document.Root == null) return;
var text = ((XText) document.Root.FirstNode).Value;
Console.WriteLine(text);
}