使用 XSLT 忽略并添加特定元素 from/to 和 XML 行

Ignoring and adding specific elements from/to an XML line using XSLT

<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

我已经能够使用以下 XSLT 将属性值 "Name" 和 "Value" 排除在 "contextID=de_De" 之外:

<?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>

现在我希望将第 1、2 和 3 点添加到此 XSLT 样式表中。

如有任何帮助,我们将不胜感激!

要将名为 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>

到您现有的样式表。

正如评论中已经指出的那样,要删除某个节点,您需要添加一个与其匹配的空模板,因此要删除 Classification 上的 ParentID 属性,请添加

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