使用 LINQ to XML 时保留某些节点
在使用 LINQ to XML 解析 XML 时,我很难保留某些节点(在本例中为 )。我首先使用以下 LINQ 查询获取一个节点...
IEnumerable
返回以下 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 节点都被删除,但我想保留 的所有实例。我期望得到以下输出...
(前面是数字)磅或磅 (金钱)。
注意:我知道这是 XSLT 中的一个简单操作,但我想知道是否有一种简单的方法可以使用 LINQ to XML 来执行此操作。
I am having difficulty preserving certain nodes (in this case <b>
) when parsing XML with LINQ to XML. I first grab a node with the following LINQ query...
IEnumerable<XElement> node = from el in _theData.Descendants("msDict") select el;
Which returns the following XML (as the first 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>
I then collect the content with the following code...
StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
output.append(elem.Value);
}
Here's the breaking point. All of the XML nodes are stripped, but I want to preserve all instances of <b>
. I am expecting to get the following as output...
(preceding a numeral) <b>pound</b> or <b>pounds</b> (of money).
Note: I know that this is a simple operation in XSLT, but I would like to know if there an easy way to do this using LINQ to XML.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在“它有效,但很混乱,我不敢相信我必须求助于这个”类别中:
就我个人而言,我认为这迫切需要 XElement 上的扩展方法...
更新:
如果您想排除除之外的所有元素标签 那么您需要使用递归方法来返回节点值。
这是您的主要方法主体:
这里是 stripTags:
所以真正的答案是不,没有一种简单的方法可以使用 LINQ to XML 来执行此操作,但是有一种方法...
In the category of "it works but it's messy and I can't believe I have to resort to this":
Personally, I think this cries out for an extension method on XElement...
UPDATE:
If you want to exclude all element tags except <b> then you'll need to use a recursive method to return node values.
Here's your main method body:
And here's stripTags:
So the real answer is that no, there isn't an easy way to do this using LINQ to XML, but there's a way...