我有一个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值的所有结尾,任何人能告诉我如何在我的情况下不包括xDoc.XPathSelectElement("//h3").Value中的值<sup class="fn-num">吗?
发布于 2015-12-07 01:38:58
试试这个:
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
发布于 2015-12-07 01:41:05
您希望从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;
}https://stackoverflow.com/questions/34124978
复制相似问题