繁体   English   中英

提取时保留自动关闭标签

[英]Preserve self-closing tags on extraction

考虑以下示例:

<case>
   <outer>
    <inner>test</inner>
    <inner>test &amp; 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM