我需要通过xsl文件更改xml中节点的特定元素的值以下是我的xml数据 hospitals hospital department clinic cid8/cid clinicNameclinic8/clinicName status1/status /clinic clinic cid9/cid clinicNameclinic9/clinicName status0/s
<hospitals> <hospital> <department> <clinic> <cid>8</cid> <clinicName>clinic8</clinicName> <status>1</status> </clinic> <clinic> <cid>9</cid> <clinicName>clinic9</clinicName> <status>0</status> </clinic> <depId>3</depId> <departmentName>dental</departmentName> </department> <hospId>2</hospId> <hospitalName>appolo</hospitalName> </hospital> <hospital> <department> <clinic> <cid>82</cid> <clinicName>clinic82</clinicName> <status>0</status> </clinic> <clinic> <cid>92</cid> <clinicName>clinic92</clinicName> <status>0</status> </clinic> <depId>4</depId> <departmentName>mental</departmentName> </department> <hospId>2</hospId> <hospitalName>manipal</hospitalName> </hospital> </hospitals>
例如,我需要根据id(即9)选择clinic9,并将状态0更改为1
我试过这样的
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="hospId"/> <xsl:param name="depId" /> <xsl:param name="clinicId"/> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="hospitals/hospital[hospId='2']/department[depId='3']/clinic[cid='9']"> <xsl:choose> <xsl:when test="cid ='9'"> <xsl:element name="status">123</xsl:element> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet>
但价值并没有改变……
如果您尝试修改/替换特定元素,则需要匹配该元素.例如,如果要尝试替换特定的状态元素,则需要匹配该特定元素.修改过的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="hospId" select="'2'"/> <xsl:param name="depId" select="'3'"/> <xsl:param name="clinicId" select="'9'"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="hospitals/hospital[hospId='2']/department[depId='3']/clinic[cid='9']/status"> <status>123</status> </xsl:template> </xsl:stylesheet>
XML输出
<hospitals> <hospital> <department> <clinic> <cid>8</cid> <clinicName>clinic8</clinicName> <status>1</status> </clinic> <clinic> <cid>9</cid> <clinicName>clinic9</clinicName> <status>123</status> </clinic> <depId>3</depId> <departmentName>dental</departmentName> </department> <hospId>2</hospId> <hospitalName>appolo</hospitalName> </hospital> <hospital> <department> <clinic> <cid>82</cid> <clinicName>clinic82</clinicName> <status>0</status> </clinic> <clinic> <cid>92</cid> <clinicName>clinic92</clinicName> <status>0</status> </clinic> <depId>4</depId> <departmentName>mental</departmentName> </department> <hospId>2</hospId> <hospitalName>manipal</hospitalName> </hospital> </hospitals>