问题: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/