c# - 如何防止 XElement.DescendantNodes() 输出重复的文本值?

标签 c# html xelement

问题:XElement.DescendantNodes()似乎将某些部分输出两次。

背景:

我需要获取 <body> 的全部内容要复制到 <div> 中的新 html 文档的元素具有嵌入式风格。这是针对 html 邮件的,其中嵌入样式应该比样式 block 工作得更好,因为许多邮件代理会剥离 <head>部分。然而,我遇到了两次获得某些零件的麻烦。如何解决这个问题?

这是示例输入:

<body>
  some text
  <a href="http://www.nix.com/index.html">Click Me</a>
  <br />
  <span>more text</span>
</body>

这是带有重复字符串的输出,否则它正是我需要的:

<body>
  <div style="font-family: Verdana; font-size: 12px;">
    some text
    <a href="http://www.nix.com/index.html">Click Me</a>
    Click Me           <<<===duplicate!!!
    <br />
    <span>more text</span>
    more text           <<<===duplicate!!!
  </div>
</body>

这是代码,我希望DescendantNodes()应该是提取两个 xelement 节点的正确方法,如 <a>和文本节点,如“一些文本”:

        using System.Xml.Linq;//XElement

        XElement InputMail = 
            new XElement("body",
                "some text",
                new XElement("a",
                    new XAttribute("href", "http://www.nix.com/index.html"),
                    "Click Me"),
                new XElement("br"),
                new XElement("span", "more text"));

        XElement OutputMail =
            new XElement("body",
                new XElement("div",
                   new XAttribute("style", "font-family: Verdana; font-size: 12px;"),
                   InputMail.DescendantNodes()));

最佳答案

DescendantNodes 将返回所有节点,包括子节点、孙节点等。这就是为什么您会看到重复 - 最内部的节点作为其各自父节点的一部分返回,加上其本身。您只需要直接子节点,为此您可以使用:

XElement OutputMail =
      new XElement("body",
          new XElement("div",
             new XAttribute("style", "font-family: Verdana; font-size: 12px;"),
             InputMail.Nodes()));

关于c# - 如何防止 XElement.DescendantNodes() 输出重复的文本值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39451221/

相关文章:

c# - 远程服务器返回错误 : (422)

c# - 以编程方式使用 wsdl 和 wsdl 解析创建代理

javascript - ng-include 和 ng-view 不同时加载

php - 如何将每个数字在不同字段中的电话号码插入数据库?

html - 如何更改 <button> 元素的字体系列?

c# - 获取 XML 的 XElement

c# - 有没有更好的方法来获取表结构?

c# - Entity Framework 5 和 XElement 字段

c# - 使用 XElement 处理无效的 XML 字符

c# - 奇怪的 string.IndexOf 行为