Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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/1/oracle/10.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
.net 什么';获取XmlElement的顶级文本的最简单方法是什么?_.net_Xml_Vb.net - Fatal编程技术网

.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);

        }