使用XSLT忽略和向XML行添加特定元素

时间:2018-01-29 12:39:26

标签: xml xslt element

<STEP-ProductInformation ExportTime="2018-01-29 12:45:47" ExportContext="fr_FR" ContextID="defaultcontext" WorkspaceID="Approved" 
UseContextLocale="true">
  <Qualifiers>
    <Qualifier ID="Qualifier root">
      <DimensionPointLink DimensionPointID="Qualifier root"/>
    </Qualifier>
    <Qualifier ID="AllCountries">
       <DimensionPointLink DimensionPointID="AllCountries"/>
    </Qualifier>
    <Qualifier ID="std.lang.all">
      <DimensionPointLink DimensionPointID="std.lang.all"/>
    </Qualifier>
    <Qualifier ID="de">
      <DimensionPointLink DimensionPointID="de"/>
    </Qualifier>
    <Qualifier ID="DE">
      <DimensionPointLink DimensionPointID="DE"/>
    </Qualifier>
    <Qualifier ID="fr">
      <DimensionPointLink DimensionPointID="fr"/>
    </Qualifier>
    <Qualifier ID="FR">
      <DimensionPointLink DimensionPointID="FR"/>
    </Qualifier>
  </Qualifiers>
  <Classifications>
    <Classification ID="Level3_1234" UserTypeID="TEST" ParentID="Level2_1234">
  <Name ContextID="de_DE" QualifierID="de" Changed="true">CHANGE TRANS EXP</Name>      <Name ContextID="fr_FR" QualifierID="de" 
Changed="true">CHANGE TRANS EXP</Name>      <MetaData>

<Value AttributeID="ATTR" ContextID="de_DE" QualifierID="de" Changed="true">TEST</Value>
<Value AttributeID="ATTR" ContextID="de_DE" QualifierID="de" Changed="true">TEST</Value>
      </MetaData>
    </Classification>
   </Classifications>
</STEP-ProductInformation>

我目前正在寻求进行以下更改:

在上面的示例XML中,我正在寻找

  1. 忽略“ParentID”值(在节点中找到)
  2. 忽略“WorkspaceID”值(在节点中找到)
  3. 为每个节点添加另一个值:Translation_Status = UpToDate
  4. 通过使用以下XSLT,我已经能够使用“contextID = de_De”排除属性值“Name”和“Value”:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <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:template match="Name[@ContextID='de_DE']"></xsl:template>
        <xsl:template match="Value[@ContextID='de_DE']"></xsl:template>
    </xsl:stylesheet>
    

    现在我想在这个XSLT样式表中添加第1,2和3点。

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

要将名为Value的子元素添加到Classification元素,您可以添加模板

<xsl:template match="Classification">
  <xsl:copy>
     <xsl:apply-templates select="@* | node()"/>
     <Value AttributeID="Translation_Status" ContextID="de_DE" QualifierID="de">UpToDate</Value>
  </xsl:copy>
</xsl:template>

到现有的样式表。

正如评论中已经指出的那样,要删除某个节点,请添加与之匹配的空模板,以便删除ParentID上的Classification属性添加

<xsl:template match="Classification/@ParentID"/>