Ignoring/removing 来自 XML 使用 XSLT 的特定值
Ignoring/removing specific values from an XML using XSLT
我正在尝试从 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>
目的是ignore/remove所有与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 和 DimensionPointID 以及 Product ID、UsertypeID 和 PartentID!
如何实现我的 objective?
非常感谢!
您需要将恒等式转换作为样式表的起点和基点实施为
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
确保属性也被复制。
或者移动到 Saxon 9.8 或 Altova 2017/18 和 XSLT 3 并简单地写 <xsl:mode on-no-match="shallow-copy"/>
.
我正在尝试从 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>
目的是ignore/remove所有与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 和 DimensionPointID 以及 Product ID、UsertypeID 和 PartentID!
如何实现我的 objective?
非常感谢!
您需要将恒等式转换作为样式表的起点和基点实施为
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
确保属性也被复制。
或者移动到 Saxon 9.8 或 Altova 2017/18 和 XSLT 3 并简单地写 <xsl:mode on-no-match="shallow-copy"/>
.