Java 使用XSLT编辑XML
想知道是否有人可以帮助解决我面临的XSLT问题 我正在尝试创建一个xslt脚本,该脚本将接受一个xml文档作为输入,并将多个字段的值更改为“xxxx”。我已设法使该部分正常工作,但我现在只希望在输入xml中的一个字段具有特定值时运行该脚本(例如,如果用户名为jbond) 如果可能的话,我希望在XSLT中有这个条件,但是我有困难 我当前的XML、XSLT、输出和预期输出如下 XML:Java 使用XSLT编辑XML,java,xml,xslt,xml-parsing,transform,Java,Xml,Xslt,Xml Parsing,Transform,想知道是否有人可以帮助解决我面临的XSLT问题 我正在尝试创建一个xslt脚本,该脚本将接受一个xml文档作为输入,并将多个字段的值更改为“xxxx”。我已设法使该部分正常工作,但我现在只希望在输入xml中的一个字段具有特定值时运行该脚本(例如,如果用户名为jbond) 如果可能的话,我希望在XSLT中有这个条件,但是我有困难 我当前的XML、XSLT、输出和预期输出如下 XML: 测试 12345 abcd XSLT: XXXX XXXX 输出: <?xml version="1
测试
12345
abcd
XSLT:
XXXX
XXXX
输出:
<?xml version="1.0" encoding="UTF-8"?>
<rootDoc/>
预期:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"?><rootDoc>
<user>test</user>
<tel>XXXX</tel>
<zip>XXXX</zip>
</rootDoc>
测试
XXXX
XXXX
将测试放在身份转换模板中没有多大意义,如果您希望在条件成立时执行某些更改,则将测试放在模板中
<xsl:template match="tel/text()">XXXX</xsl:template>
<xsl:template match="zip/text()">XXXX</xsl:template>
XXXX
XXXX
应改为
<xsl:template match="rootDoc[user = 'test']/tel/text()">XXXX</xsl:template>
<xsl:template match="rootDoc[user = 'test']/zip/text()">XXXX</xsl:template>
XXXX
XXXX
可以加入
<xsl:template match="rootDoc[user = 'test']/tel/text() | rootDoc[user = 'test']/zip/text()">XXXX</xsl:template>
XXXX
对于单个条件,假设它是rootNode,您可以使用
<xsl:template match="/rootNode[not(user = 'test')]">
<xsl:copy-of select="."/>
</xsl:template>
然后,其他情况由标识转换和专用模板处理。如果不进行标识转换,而是添加特定的匹配项,XSLT将自动查找最接近的匹配项。您可以根据需要自定义select=”“或添加更多模板。嗯
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" >
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tel"><tel>XXXX</tel></xsl:template>
<xsl:template match="zip"><zip>XXXX</zip></xsl:template>
</xsl:stylesheet>
XXXX
XXXX
感谢您的回复,您是否知道是否可以有一个更通用的解决方案,只运行一次条件,而不是针对每个节点。在最终文档中,有几个字段需要清理,因此,我们尝试减少重复条件的数量。如果您知道如果条件不成立,您不想更改任何内容,那么您可以对根元素使用一个模板,它只是复制所有内容,而不是应用模板。测试w3.org/2005/xpath函数“>XXXX
<xsl:template match="/rootNode[not(user = 'test')]">
<xsl:copy-of select="."/>
</xsl:template>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" >
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tel"><tel>XXXX</tel></xsl:template>
<xsl:template match="zip"><zip>XXXX</zip></xsl:template>
</xsl:stylesheet>