在提取时保留自关闭标签
本文关键字:关闭标签 保留 提取 | 更新日期: 2023-09-27 17:50:58
考虑以下示例:
<case>
<outer>
<inner>test</inner>
<inner>test & test <br /><br />test</inner>
<inner></inner>
</outer>
</case>
我想提取第二个内部元素中包含的字符串,同时保留br标记(或者最好将它们作为'n),但解码所有HTML编码字符。也就是说,我想得到:
"test & test 'n'ntest"
或
"test & test <br /><br />test"
到目前为止,我已经尝试了以下方法。它似乎可以解码HTML编码字符,但完全删除了标签。
XDocument xDoc = XDocument.Load(file);
XNamespace ns = XNamespace.Get("http://www.w3.org/1999/xhtml");
var cas = xDoc.Descendants().First(e => e.Name.Equals(ns.GetName("case")));
foreach (var row in cas.Elements())
{
var columnVals = row.Elements(ns.GetName("inner")).Select(e => e.Value);
string str = columnValues.Skip(1).First();
// str == "test & test test"
// but i want:
// "test & test 'n'ntest" or "test & test <br /><br />test"
}
尝试如下:
XDocument xDoc = XDocument.Load(file);
XNamespace ns = XNamespace.Get("http://www.w3.org/1999/xhtml");
var cas = xDoc.Descendants().First(e => e.Name.Equals(ns.GetName("case")));
foreach (var row in cas.Elements())
{
var columnVals = row.Elements(ns.GetName("inner")).Select(e => e.Nodes());
var str = columnVals.Skip(1).First();
var stringResult = WebUtility.HtmlDecode(string.Join(" ", str));
}
它以字符串的形式获取节点,但会解码任何HTML转义。
输出为:
test & test <br /> <br /> test