C# 使用LINQ to XML时保留某些节点
在使用LINQ解析XML时,我很难保留某些节点(在本例中为C# 使用LINQ to XML时保留某些节点,c#,linq-to-xml,xelement,C#,Linq To Xml,Xelement,在使用LINQ解析XML时,我很难保留某些节点(在本例中为)。我首先使用以下LINQ查询获取一个节点 IEnumerable node=从数据中的el。子体(“msDict”)选择el 它返回以下XML(作为第一个XElement) 这是突破点。所有XML节点都已剥离,但我希望保留的所有实例。我希望得到以下输出 (数字前)英镑或英镑(货币)。 注意:我知道这在XSLT中是一个简单的操作,但我想知道是否有一种简单的方法可以使用LINQtoXML实现这一点 在“它有效,但很混乱,我不敢相信我不得不求
)。我首先使用以下LINQ查询获取一个节点
IEnumerable node=从数据中的el。子体(“msDict”)选择el代码>
它返回以下XML(作为第一个XElement
)
这是突破点。所有XML节点都已剥离,但我希望保留
的所有实例。我希望得到以下输出
(数字前)英镑或英镑(货币)。
注意:我知道这在XSLT中是一个简单的操作,但我想知道是否有一种简单的方法可以使用LINQtoXML实现这一点 在“它有效,但很混乱,我不敢相信我不得不求助于此”的类别中:
就我个人而言,我认为这需要一种对XElement的扩展方法
更新:
如果要排除所有元素标记,则需要使用递归方法返回节点值
以下是您的主要方法主体:
StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
output.Append(stripTags(elem));
}
下面是条纹标签:
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并不是一种简单的方法,但有一种方法…我得到了一个语法错误:参数类型“Systems.Collections.Generic.IEnumerable”不能分配给参数类型“string[]”啊。如果未使用.Net 4,则需要添加.ToArray()。我将更新以使其更具通用性。使用您的方法,我将获得“(在数字之前)英镑或英镑(货币)。”。我想保留,但不是。用你的方法有没有办法达到这种行为?啊。这更为复杂。您需要向一个方法添加一个递归调用,该方法标识节点是否为XElement,如果是,则标识它是否为XElement。更难,但不是不可能。对我的情况来说,这很有魅力。非常感谢你!
StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
output.append(string.Join("", elem.Nodes().Select(n => n.ToString()).ToArray()));
}
StringBuilder output = new StringBuilder();
foreach (XElement elem in node)
{
output.Append(stripTags(elem));
}
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();
}
}