【问题标题】:Ignoring/removing specific values from an XML using XSLT使用 XSLT 从 XML 中忽略/删除特定值
【发布时间】:2017-12-15 13:48:42
【问题描述】:

我正在尝试从我们的 XML 中删除不需要的信息:

<STEP-ProductInformation ExportTime="2017-12-06 16:32:55" 
ExportContext="de_DE" ContextID="defaultcontext" WorkspaceID="Main" 
UseContextLocale="false">
<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>
<Products>
<Product ID="PROD1" UserTypeID="OBJ_MASTER_PRODUCT" ParentID="PARENT1">
  <Name>52470025-1</Name>
  <Values>
    <Value AttributeID="ATTR_1" ContextID="de_DE" 
    QualifierID="de">Je m'appelle Alex Testtest 3</Value>        
    <Value AttributeID="ATTR_2" ContextID="fr_FR" 
    QualifierID="de">Je m'appelle Alex Testtest 3</Value> 
  </Values>
</Product>  
</Products>
</STEP-ProductInformation>

目的是忽略/删除与ContextID="de_DE"相关的所有值,从而产生结果:

<STEP-ProductInformation ExportTime="2017-12-06 16:32:55" 
ExportContext="de_DE" ContextID="defaultcontext" WorkspaceID="Main" 
UseContextLocale="false">
<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>
<Products>
<Product ID="PROD1" UserTypeID="OBJ_MASTER_PRODUCT" ParentID="PARENT1">
  <Name>52470025-1</Name>
  <Values>
    <Value AttributeID="ATTR_2" ContextID="fr_FR" 
    QualifierID="de">Je m'appelle Alex Testtest 3</Value> 
  </Values>
 </Product>  
</Products>
</STEP-ProductInformation>

到目前为止,我已经创建了以下 XSL 代码:

<?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/>
    </xsl:copy>
</xsl:template>
<xsl:template match="Value[@ContextID='de_DE']"></xsl:template>
</xsl:stylesheet>

但是,这不包括 Qualifier ID 和 DimensionPointIDs 以及 Product ID、UsertypeID 和 PartentID!

我怎样才能实现我的目标?

非常感谢!

【问题讨论】:

    标签: xml xslt delete-row


    【解决方案1】:

    您需要实现身份转换作为样式表的起点和基点

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

    确保属性也被复制。

    或者转移到 Saxon 9.8 或 Altova 2017/18 和 XSLT 3 并简单地写 &lt;xsl:mode on-no-match="shallow-copy"/&gt;

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      相关资源
      最近更新 更多