如何解决如何使用xsltproc根据节点值更新xml文件中的属性值
我有下面的xml文件-
<APP_PACK_CONFIG>
<APP_PACK_ID>X1</APP_PACK_ID>
<APP_PACK_NAME>DEF</APP_PACK_NAME>
<APP_PACK_DESCRIPTION>DEF</APP_PACK_DESCRIPTION>
<VERSION>1.2.3.4.5</VERSION>
<APP>
<APP_ID PREREQ="" DEF_SEL_FLG="YES" ENABLE="YES">ABC_XYZ</APP_ID>
<APP_NAME>Application for XYZ</APP_NAME>
<APP_DESCRIPTION>XYZ</APP_DESCRIPTION>
<VERSION>1.2.3.4.5</VERSION>
</APP>
<APP>
<APP_ID PREREQ="ABC_XYZ" ENABLE="">ABC_DEF</APP_ID>
<APP_NAME>DEF</APP_NAME>
<APP_DESCRIPTION>Application for DEF</APP_DESCRIPTION>
<VERSION>1.2.3.4.5</VERSION>
</APP>
</APP_PACK_CONFIG>
如果我传递的参数与节点值即ABC_DEF相匹配,则必须设置ENABLE =“ YES”。
我已经尝试在xsl样式表下实现此目的,但无法获得预期的结果。我是xslt的新手,并尝试将其用于我正在构建的实用程序之一,该实用程序需要根据用户输入来修改此xml文件。请建议我该怎么办。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:param name="appID" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:for-each select="APP_PACK_CONFIG/APP/APP_ID">
<xsl:if test="text()=$appID">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="ENABLE">
<xsl:value-of select="YES"/>
</xsl:attribute>
</xsl:copy>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我正在如下运行样式表-
xsltproc -o ./$3_PACK_TMP.xml --stringparam appID $app ./enableApp_TMP.xsl ./$3_PACK.xml
解决方法
以下是我发表评论时所想到的:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:param name="appID" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="APP_PACK_CONFIG/APP/APP_ID/@ENABLE">
<xsl:choose>
<xsl:when test=".. = $appID">
<xsl:attribute name="{name()}">YES</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。