掩码元素\属性值,使用Linq - c#

我有一个XML字符串,其中包含要屏蔽的某些值。我还有一个黑名单列表,其中包含要屏蔽的元素或属性的名称。如何使用Linq做到这一点?

var BlackList=new List<string>{"ssn", "dateofbirth"};

var xml=@"<Rows><Row><SSN>123-12-1234</SSN><Address>123 Somewhere Street</Address><DateOfBirth>12-12-2012</DateOfBirth></Row><Row><SSN value=""123-12-1234""/><Address value=""123 Somewhere Street""/><DateOfBirth value=""12-12-2012""/></Row></Rows>";

结果集如下所示:

"<Rows><Row><SSN>RemovedForSecurity</SSN><Address>123 Somewhere Street</Address><DateOfBirth>RemovedForSecurity</DateOfBirth></Row><Row><SSN value="RemovedForSecurity"/><Address value="123 Somewhere Street"/><DateOfBirth value="RemovedForSecurity"/></Row></Rows>"

参考方案

首先,对所有实际的XML使用LINQ to XML。您以字符串开头并以字符串结尾的事实是偶然的:您实际上是在尝试处理XML文档。在那时,这相当容易:

var redactedElements = new HashSet<XName>
{
    "SSN",
    "CreditCard"
};
var redactedAttributes = new HashSet<XName>
{
    "dateofbirth",
    ...
};

var elements = doc.Descendants()
                  .Where(x => redactedElements.Contains(x.Name))
                  .ToList();
foreach (var element in elements)
{
    element.Value = "RemovedForSecurity";
}

var attributes = doc.Descendants()
                    .Attributes()
                    .Where(x => redactedAttributes.Contains(x.Name))
                    .ToList();
foreach (var attribute in attributes)
{
    attribute.Value = "RemovedForSecurity";
}

编辑:不区分大小写,您将保留不区分大小写的本地名称列表:

var redactedElements = new HashSet<string>(StringEqualityComparer.OrdinalIgnoreCase);
{
    "SSN",
    "CreditCard"
};
var elements = doc.Descendants()
                  .Where(x => redactedElements.Contains(x.Name.LocalName))
                  .ToList();
// Ditto for the attributes

不过,如果您指定确切的名称,IMO会更好。

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php

我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…

将python scikit学习模型导出到pmml - python

我想将python scikit-learn模型导出到PMML。哪个python软件包最合适?我阅读了有关Augustus的内容,但是我无法使用scikit-learn模型找到任何示例。 python大神给出的解决方案 SkLearn2PMML是 JPMML-SkLearn命令行应用程序周围的薄包装。有关受支持的Scikit-Learn Estimator和…

如何使用PHP从动态输入字段捕获数组值? - javascript

我正在编写一个在线时间跟踪网页,允许用户将学习时间输入该系统。用户将首先输入名称,然后根据日期输入学习时间。一天中可能会有多个学习时间。以下是我第一页的编码,<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"…

SOAPFaultException部署在Tomcat上时,但在GlassFish中工作正常 - java

朋友们,我一直在尝试很多,阅读了很多论坛,但无法理解为什么出现此问题。我使用契约优先方法创建了一个Jax-WS WebService。创建WSDL和XSD,然后使用wsimport工具生成其余工件,为SEI提供实现。将WebService应用程序部署到Eclipse Helios中的GlassFish(Glassfish适配器和Eclipse中安装的插件)。…