如何删除Xpathselectelement中的任何脚注或注释或结尾注释

时间:2015-12-07 01:15:43

标签: c# html xml

我有一个包含此值的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,但这不安全,因为它将删除包含1的h3.Value的所有结尾,任何人都可以告诉我如何不包括在我的案例中,<sup class="fn-num">中的值xDoc.XPathSelectElement("//h3").Value

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

您希望从Blah blah元素获取的值h3是其他节点,它是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;
}