XSLT 1.0 添加带有属性的元素(如果不存在)
XSLT 1.0 add element with attribute if it doesn't exist
如果 xml 文件中不存在,如何添加具有属性的元素。我想添加
<c name="EX1">testing</c>
每个"m"节点如果不存在
<?xml version="1.0" encoding="UTF-8"?>
<h>
<m>
<c name="HM">G</c>
<c name="HL">20</c>
<c name="HS">f</c>
</m>
<m>
<c name="HM">L</c>
<c name="HL">30</c>
<c name="HS">t</c>
</m>
<m>
<c name="HM">S</c>
<c name="HL">10</c>
<c name="HS">t</c>
<c name="EX1">testing</c>
</m>
</h>
这是我的 xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是我想要的输出
<?xml version="1.0" encoding="UTF-8"?>
<h>
<m>
<c name="HM">G</c>
<c name="HL">20</c>
<c name="HS">f</c>
<c name="EX1">testing</c>
</m>
<m>
<c name="HM">L</c>
<c name="HL">30</c>
<c name="HS">t</c>
<c name="EX1">testing</c>
</m>
<m>
<c name="HM">S</c>
<c name="HL">10</c>
<c name="HS">t</c>
<c name="EX1">testing</c>
</m>
</h>
使用身份模板后,您需要做的就是添加第二个匹配 m
元素的模板(我假设您在这里指的是 m
而不是 h
),其中需要的节点不存在,像这样
<xsl:template match="m[not(c[@name='EX1' and text()='testing'])]">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<c name="EX1">testing</c>
</xsl:copy>
</xsl:template>
如果 xml 文件中不存在,如何添加具有属性的元素。我想添加
<c name="EX1">testing</c>
每个"m"节点如果不存在
<?xml version="1.0" encoding="UTF-8"?>
<h>
<m>
<c name="HM">G</c>
<c name="HL">20</c>
<c name="HS">f</c>
</m>
<m>
<c name="HM">L</c>
<c name="HL">30</c>
<c name="HS">t</c>
</m>
<m>
<c name="HM">S</c>
<c name="HL">10</c>
<c name="HS">t</c>
<c name="EX1">testing</c>
</m>
</h>
这是我的 xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是我想要的输出
<?xml version="1.0" encoding="UTF-8"?>
<h>
<m>
<c name="HM">G</c>
<c name="HL">20</c>
<c name="HS">f</c>
<c name="EX1">testing</c>
</m>
<m>
<c name="HM">L</c>
<c name="HL">30</c>
<c name="HS">t</c>
<c name="EX1">testing</c>
</m>
<m>
<c name="HM">S</c>
<c name="HL">10</c>
<c name="HS">t</c>
<c name="EX1">testing</c>
</m>
</h>
使用身份模板后,您需要做的就是添加第二个匹配 m
元素的模板(我假设您在这里指的是 m
而不是 h
),其中需要的节点不存在,像这样
<xsl:template match="m[not(c[@name='EX1' and text()='testing'])]">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<c name="EX1">testing</c>
</xsl:copy>
</xsl:template>