我需要通过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>
