使用XSLT为xml中的现有节点添加值

时间:2016-08-01 10:44:38

标签: xml xslt

在我的xml中我通过文档在不同的地方有节点<action/>。 每个动作节点都应该得到值&#34; U&#34;。

我尝试了这个,但它不起作用:

输入xml:

<?xml version="1.0" encoding="UTF-8"?><operationsSchedule>
    <id>test</id>
    <operationsRequests>
        <operationsRequest>
            <id>20572152</id>
            <segmentRequirements>
                <segmentRequirement>
                    <id>W1</id>
                    <materialRequirements>
         <action/>

         <hierarchyScope>default</hierarchyScope>
         <materialDefinitionID>510000533</materialDefinitionID>
         <materialRequirementID>510000533_0004</materialRequirementID>
         <materialRequirementProperties>
            <materialRequirementProperty>
               <action/>
               <dataType>Text</dataType>
               <hierarchyScope>default</hierarchyScope>
               <materialDefinitionPropertyID>BAG_NR</materialDefinitionPropertyID>
               <materialRequirementPropertyID>BAG_NR</materialRequirementPropertyID>
               <materialRequirementPropertyValueTexts>
                  <materialRequirementPropertyValueText>
                     <languageID>EN</languageID>
                     <uiid>47275</uiid>
                     <value><![CDATA[1]]></value>
                  </materialRequirementPropertyValueText>
               </materialRequirementPropertyValueTexts>
               <materialUse>Other</materialUse>
               <requiredByRequestedSegmentResponse>Other</requiredByRequestedSegmentResponse>
            </materialRequirementProperty>
            <materialRequirementProperty>
               <action/>
               <dataType>Text</dataType>
               <hierarchyScope>default</hierarchyScope>
               <materialDefinitionPropertyID>SCENARIO</materialDefinitionPropertyID>
               <materialRequirementPropertyID>SCENARIO</materialRequirementPropertyID>
               <materialRequirementPropertyValueTexts>
                  <materialRequirementPropertyValueText>
                     <languageID>EN</languageID>
                     <uiid>47276</uiid>
                     <value><![CDATA[C]]></value>
                  </materialRequirementPropertyValueText>
               </materialRequirementPropertyValueTexts>
               <materialUse>Other</materialUse>
               <requiredByRequestedSegmentResponse>Other</requiredByRequestedSegmentResponse>
            </materialRequirementProperty>

                    </materialRequirements>
                </segmentRequirement>
            </segmentRequirements>
        </operationsRequest>
    </operationsRequests>
</operationsSchedule>

的xsl:                 

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="action">
  <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:text>U</xsl:text>
    </xsl:copy>
 </xsl:template>

 <xsl:template match="materialRequirements"/>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

您需要移除<xsl:template match="materialRequirements"/>,因为materialRequirements元素未被处理,显然,如果包含任何action元素,则不会使用您的模板。