什么是可以根据名称添加或替换属性值的 XSLT(版本 1.0)转换?
例如,给定以下输入 XML
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/hadoop/dfs/name</value>
</property>
</configuration>
我如何指定两个具有名称和值的属性,例如:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop/dfs/data</value>
</property>
</configuration>
因此生成的 XML 包含根的所有原始子级configuration
元素,并且只有一个property
与给定的name
?例如:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop/dfs/data</value>
</property>
</configuration>
我尝试过其他几个问题的示例,但它们没有相同的架构,而且我不知道足够的 XSLT 来适应我的用例。
Given:
输入 XML
<configuration>
<property>
<name>A</name>
<value>old A</value>
</property>
<property>
<name>B</name>
<value>old B</value>
</property>
</configuration>
覆盖.xml
<configuration>
<property>
<name>B</name>
<value>new B</value>
</property>
<property>
<name>C</name>
<value>new C</value>
</property>
</configuration>
以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="override-path" select="'override.xml'" />
<xsl:variable name="override-properties" select="document($override-path)/configuration/property" />
<xsl:template match="/configuration">
<xsl:copy>
<!-- copy local properties not overridden by external properties -->
<xsl:copy-of select="property[not(name=$override-properties/name)]"/>
<!-- add all overiding properties -->
<xsl:copy-of select="$override-properties"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>A</name>
<value>old A</value>
</property>
<property>
<name>B</name>
<value>new B</value>
</property>
<property>
<name>C</name>
<value>new C</value>
</property>
</configuration>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)