我有一个包含此值的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
。
答案 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;
}