如何删除Xpathselect元素中的任何脚注或注释或结束注释



我有一个包含这个值的html

<h3 class="sgc-5">Blah blah<sup class="fn-num"><a id="r_fn1" href="#fn1">1</a></sup></h3>

为了得到h3的值,我使用了下面的代码

XDocument xDoc = XDocument.Parse(xml);
Console.WriteLine(xDoc.XPathSelectElement("//h3").Value)

我得到了结果Blah Blah1,但我想要的结果是Blah Blah我只想在结果中删除1。我尝试.Remove()删除Blah Blah结尾的1,但这不安全,因为它会删除h3的所有结尾。包含1的值,有人能告诉我在我的情况下如何不将值<sup class="fn-num">包括在xDoc.XPathSelectElement("//h3").Value中吗。

试试这个:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.XPath;
using System.Xml.Linq;
using System.Xml;
namespace Test
{
    class Program
    {
        static int Main(string[] args)
        {
            String xml = "<h3>Blah blah<sup><a>1</a></sup></h3>";
            XDocument xDoc = XDocument.Parse(xml);
            var h3 = xDoc.XPathSelectElement("//h3");
            String tmp = h3.DescendantNodes().Where(node=>node.NodeType == XmlNodeType.Text).First().ToString();
            Console.WriteLine(tmp);
            return 1;
        }
    }
}

这里我知道它是第一个节点。您可以循环通过子节点并检查所需的节点类型。

以下是指向所有节点类型的链接:https://msdn.microsoft.com/en-us/library/system.xml.xmlnodetype(v=vs.110).aspx

要从h3元素中获得的值Blah blah在其他节点中,它是XText类型的实例。为了获得该值,可以选择XText类型的第一个节点。它包含您要查找的字符串:

string value = xDoc.XPathSelectElement("//h3").Nodes().OfType<XText>().First().Value;

如果要在节点的所有子节点中查找第一个文本节点,则应使用DescendantNodes方法而不是Nodes方法。

var node = xDoc.XPathSelectElement("//h3").DescendantNodes().OfType<XText>().FirstOrDefault();
if (node != null)
{
    string value = node.Value;
}

最新更新