【发布时间】:2015-07-28 03:32:05
【问题描述】:
更新: 我完全把问题简单化了,把每个人都误入歧途了。这是 actual 问题:我正在尝试获取其值与正则表达式匹配的元素。我重写了问题...
给定一个我不知道结构的 XDocument,如何选择所有值与正则表达式匹配的元素?
例如:
<html>
<head></head>
<body>
<table>
<tr>
<td>{{ var1 }}</td>
<td>{{ var2 }}</td>
</tr>
<tr>
<td>{{ var3 }}</td>
<td>{{ var4 }}</td>
</tr>
</table>
</body>
</html>
我会得到 html、body、table、tr 和四个 td 元素的结果。如何选择值与此正则表达式匹配的所有元素并仅返回 td 元素
private Regex _placeholderRegex = new Regex("({{.+?}})");
public string GetParsedDocument(...)
{
var placeHolders = _template
.Descendants()
.Where(d => _placeholderRegex.IsMatch(d.Value));
// more stuff
return null;
}
我最终得到一个结果,每个元素都是我正在寻找的元素的祖先...
所以现在我想了想,我发现它只是查看每个元素的全部内容,并在其中任何地方包含匹配项时选择它。所以我想只需要找到一种方法来缩小范围。
【问题讨论】:
-
我认为您正在寻找文本,而不是价值。 (请注意,最好不将 HTML 显示为 XML 的示例,但是...)
-
我实际上是在尝试构建一个模板解析器来创建 html 电子邮件。我已将 html 文档解析为 XDocument 仅用于操作目的,XDoc 未公开。此外,Text 似乎不是可用的属性。
-
@Sinaesthetic can't reproduce the problem(只有 2 个元素按预期返回)
-
Ack...好吧,那是我的错。我试图简化问题并最终掩盖了它。事实是我正在使用正则表达式来进行匹配。我会更新我的问题。
标签: c# linq linq-to-xml