寻找以键值标签

时间:2018-01-16 10:50:03

标签: xml xpath

我有一个用例,我想掩盖我的xml,它的字段和值如下所示:

<root>
    <entries>
        <entry>
            <key>key1</key>
            <value>value1</value>
        </entry>
        <entry>
            <key>key2</key>
            <value>value2</value>
        </entry>
        <entry>
            <key>key3</key>
            <value>value3</value>
        </entry>
    </entries>
</root>

我想要一个可以通过提供一些配置来实现这一点的实用程序,我可以只提供需要屏蔽的字段名称。使用xpath编写完整的自定义代码,然后明确地读取需要屏蔽的字段名称,并且考虑到将来在xml中添加字段,屏蔽不是可扩展的解决方案。

如果有一些可用于此的实用程序,请告诉我。

2 个答案:

答案 0 :(得分:0)

你应该learn xsl。这是一个非常强大的机制,允许您处理结构化的xml数据。

我不是xls的专家,但我已经为你准备了一个用xsl解决你的问题的例子。在我的示例中,您可以选择要屏蔽的键和不屏蔽的键。没有过滤它会更容易:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <root>
            <entries>
                <xsl:for-each select="//value">
                    <xsl:variable name="key" select="./parent::node()/key"/>
                    <entry>
                        <key>
                            <xsl:value-of select="$key"/>
                        </key>
                        <value>
                            <xsl:choose>
                                <xsl:when test="$key='key1'">###</xsl:when>
                                <xsl:when test="$key='key3'">###</xsl:when>
                                <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
                            </xsl:choose>
                        </value>
                    </entry>
                </xsl:for-each>
            </entries>
        </root>
    </xsl:template>
</xsl:stylesheet>

所以这种转变的输出将是:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <entries>
        <entry>
            <key>key1</key>
            <value>###</value>
        </entry>
        <entry>
            <key>key2</key>
            <value>value2</value>
        </entry>
        <entry>
            <key>key3</key>
            <value>###</value>
        </entry>
    </entries>
</root>

要运行此功能,您需要使用xsl处理器:How do I run an XSLT file?

我已在online xsl test tool.

中测试了我的解决方案

答案 1 :(得分:0)

我们开放了我们的工具Paranoid,该工具可让您屏蔽单个XML元素或单个XML文件或XML文件文件夹中的所有元素。

它还可以通过缓冲处理大型XML文件。