c# - 使用 LINQ to XML 时保留某些节点

标签 c# linq-to-xml xelement

在使用 LINQ to XML 解析 XML 时,我很难保留某些节点(在本例中为 <b>)。我首先使用以下 LINQ 查询获取一个节点...

IEnumerable<XElement> node = from el in _theData.Descendants("msDict") select el;

返回以下 XML(作为第一个 XElement)...

<msDict lexid="m_en_us0000002.001" type="core">
  <df>(preceding a numeral) <b>pound</b> or <b>pounds</b> (of money)
  <genpunc tag="df">.</genpunc></df>
</msDict>

然后我用下面的代码收集内容...

StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
    output.append(elem.Value);
}

这里是突破点。所有 XML 节点都被剥离,但我想保留 <b> 的所有实例.我期望得到以下输出...

(preceding a numeral) <b>pound</b> or <b>pounds</b> (of money).

注意:我知道这是 XSLT 中的一个简单操作,但我想知道是否有使用 LINQ to XML 执行此操作的简单方法。

最佳答案

在“它有效但很乱,我不敢相信我必须求助于此”的类别中:

StringBuilder output = new StringBuilder();  
foreach (XElement elem in node)  
{  
    output.append(string.Join("", elem.Nodes().Select(n => n.ToString()).ToArray()));  
} 

就我个人而言,我认为这需要 XElement 上的扩展方法...

更新: 如果你想排除所有元素标签 except 那么你需要使用递归方法来返回节点值。

这是你的主要方法体:

StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
    output.Append(stripTags(elem));
}

这里是 stripTags:

private static string stripTags(XNode node)
{
    if (node is XElement && !((XElement)node).Name.ToString().Equals("b", StringComparison.InvariantCultureIgnoreCase))
    {
        return string.Join(string.Empty, ((XElement)node).Nodes().Select(n => stripTags(n)).ToArray());
    }
    else
    {
        return node.ToString();
    }
}

所以真正的答案是不,没有一种简单的方法可以使用 LINQ to XML 来做到这一点,但是有一种方法...

关于c# - 使用 LINQ to XML 时保留某些节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4037856/

相关文章:

c# - 未找到来自 google api 的 UserCredential 类

c# - 如何将 MonoTouch.Dialog View 封装到 View Controller 中?

c# - 如何获取 XML 模式验证失败位置的 XPath(或节点)?

xml - XElement.Load() 上出现 "undeclared prefix"错误的解决方法

c# - 开源C#机会

c# - string.Replace() 搜索 string + ANY CHAR + string

c# - 使用 XML 获取所有同名元素的内容?

linq - 使用 Linq-to-XML 插入,带线程

c# - 错误: exception of type 'System.NullReferenceException' occurred in exe

asp.net - 从 Web 服务返回 XElement