代码之家  ›  专栏  ›  技术社区  ›  AlexD

使用XSLT从XML行忽略特定元素并将其添加到XML行

  •  0
  • AlexD  · 技术社区  · 7 年前
    <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\u Status=Update

    我已经能够使用以下XSLT排除属性值“Name”和“Value”以及“contextID=de\u 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>
    

    现在,我希望在这个XSLT样式表中添加点1、2和3。

    任何帮助都将不胜感激!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Martin Honnen    7 年前

    添加名为 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 属性打开 分类 添加

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