我正在编写一些处理记录 xml 数据的代码,并且我希望能够替换文档中某些元素(例如密码)的内容。我不想序列化和解析文档,因为我的代码将处理各种模式。
输入文档示例:
doc #1:
<user>
<userid>jsmith</userid>
<password>myPword</password>
</user>
doc #2:
<secinfo>
<ns:username>jsmith</ns:username>
<ns:password>myPword</ns:password>
</secinfo>
我希望我的输出是:
输出文档#1:
<user>
<userid>jsmith</userid>
<password>XXXXX</password>
</user>
输出文档#2:
<secinfo>
<ns:username>jsmith</ns:username>
<ns:password>XXXXX</ns:password>
</secinfo>
由于我要处理的文档可能有多种模式,因此我希望提出一个很好的通用正则表达式解决方案,可以找到其中包含密码的元素并相应地屏蔽内容。
我可以使用正则表达式和 C# 解决这个问题还是有更有效的方法?
这个问题最好用 XSLT 解决:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//password">
<xsl:copy>
<xsl:text>XXXXX</xsl:text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
只要正确处理命名空间,这对两个输入都有效。
编辑:澄清我的意思“正确处理命名空间”
确保您的源文档包含ns
名称前缀具有为文档定义的命名空间,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<secinfo xmlns:ns="urn:foo">
<ns:username>jsmith</ns:username>
<ns:password>XXXXX</ns:password>
</secinfo>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)