我们可以在xslt操作期间在运行时更新输出xml的元素节点吗?

时间:2016-05-04 16:10:44

标签: xml xslt

我想使用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>

2 个答案:

答案 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>