使用 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 中,我希望
- 忽略"ParentID"值(在节点中找到)
- 忽略"WorkspaceID"值(在节点中找到)
- 向每个节点添加另一个值说: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"/>
<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 中,我希望
- 忽略"ParentID"值(在节点中找到)
- 忽略"WorkspaceID"值(在节点中找到)
- 向每个节点添加另一个值说: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"/>