我想使用xslt 1.0版生成一个xml文件。但是我无法在输出文件Eg中更新xml节点的元素值。
输入xml文件
<Node>
<product>
<productSelected>false</productSelected>
<productId>L0001</productId>
</product>
<product>
<productSelected>true</productSelected>
<productId>L0002</productId>
</product>
<product>
<productSelected>true</productSelected>
<productId>L0003</productId>
</product>
<product>
<productSelected>false</productSelected>
<productId>L0004</productId>
</product>
</Node>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="Node/product"/>
</xsl:template>
<xsl:template match="Node/parent/productSelected">
<xsl:choose>
<xsl:when test=". = 'true'">
<xsl:element name="status">
<xsl:value-of select="true()" />
</xsl:element>
</xsl:when>
</xsl:template>
</xsl:stylesheet>
输出xml
<status>true</status>
<status>true</status>
在输出中,有两个具有相同名称的节点我只是期望单个节点而不是两个重复节点Eg。 输出应该是
<status>true</status>
答案 0 :(得分:1)
我猜你想做(!):
<?xml version="1.0" encoding="UTF-8"?>
<status>true</status>
这将返回:
child
如果至少有一个1
元素的值为<?xml version="1.0" encoding="UTF-8"?>
<status>false</status>
。否则结果将是:
CompletableFuture
答案 1 :(得分:0)
只需使用:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="parent">
<status><xsl:value-of select="child[. = 1] = 1"/></status>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<Node>
<parent>
<child>1</child>
<child>2</child>
</parent>
</Node>
产生了想要的正确结果:
<status>true</status>
如果XML文档是:
<Node>
<parent>
<child>3</child>
<child>2</child>
</parent>
</Node>
然后转换再次生成想要的正确结果:
<status>false</status>