我想屏蔽部分xml文件(所选元素)。那些元素将在单独的xml文件(参数)中。我有工作解决方案,但我有硬编码标签名称。任何帮助都是欣赏这种动态
xml有效载荷
if unsorted_list[i] >= sorted_list_oldskool[j]:
预期产出
<results>
<ready>yes</ready>
<student>
<accounts>
<boa>23423423423424</boa>
<dcu>345345353535</dcu>
</accounts>
<cardState>
<approved>true</approved>
<approvedacc>
<element>232323433233</element>
</approvedacc>
<refund>
<element>200</element>
</refund>
</cardState>
<cource>
<marks>
<element>A+</element>
</marks>
<total>
<element>20000</element>
</total>
</cource>
<created>true</created>
<firstName>john doe</firstName>
<ssn>123456</ssn>
</student>
</results>
密钥xml文件(要屏蔽的元素)
<results>
<ready>yes</ready>
<student>
<accounts>
****************
</accounts>
<cardState>
<approved>true</approved>
<approvedacc>
<element>232323433233</element>
</approvedacc>
<refund>
<element>200</element>
</refund>
</cardState>
<cource>
<marks>
<element>A+</element>
</marks>
<total>
<element>20000</element>
</total>
</cource>
<created>true</created>
<firstName>**********</firstName>
<ssn>123456</ssn>
</student>
</results>
我的工作解决方案是
<keys>
<key>accounts</key>
<key>firstName</key>
</keys>
当前输出
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:param name="mask" select="'********'"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//results/student/accounts/*">
<xsl:value-of select="$mask"/>
</xsl:template>
</xsl:stylesheet>
如果它是xslt 1.0解决方案那将是伟大的
答案 0 :(得分:1)
以这种方式尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="path-to-keys" select="'keys.xml'"/>
<xsl:template match="*">
<xsl:copy>
<xsl:choose>
<xsl:when test="name()=document($path-to-keys)/keys/key">********</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
以上假设您将路径作为参数传递给keys.xml
文件。如果参数是文件的内容,请尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="keys"/>
<xsl:template match="*">
<xsl:copy>
<xsl:choose>
<xsl:when test="name()=exsl:node-set($keys)/keys/key">********</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这假设您传递参数的方法设法将keys.xml
文件的内容作为XML 传递(即不是包含转义标记的字符串 )。