我有一个包含这个值的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;
}