gpt4 book ai didi

xml - 如何执行 XSL 从 xml 标签中删除文本

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:54 25 4
gpt4 key购买 nike

我有一个像这样的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<COLLECTION>
<Added>
<part>
<weight>5kg</weight>

</part>
<part>
<weight></weight>
</part>
<part>
<weight>2kg</weight>
</part>
</Added>
<Update>
<part>
<weight></weight>
</part>
<part>
<weight>3kg</weight>
</part>
<part>
<weight>2kg</weight>
</part>
</Update>
</COLLECTION>

我想在其上应用 XSL,以便 <weight> 标记需要转换为 Weight 并考虑唯一的数字。有了这个,我想添加一些输入 XML 中不存在的额外标记。 <unitWeights> 如果 <weight> 的值只存在并且只有这样它才会显示 KG 其余的它将是空白的。

预期输出:

<?xml version="1.0" encoding="UTF-8"?>
<COLLECTION>
<Added>
<part>
<Weight>5</Weight>
<unitWeights>KG</unitWeights>
</part>
<part>
<Weight></Weight>
<unitWeights></unitWeights>
</part>
<part>
<Weight>2</Weight>
<unitWeights>KG</unitWeights>
</part>
</Added>
<Update>
<part>
<Weight></Weight>
<unitWeights></unitWeights>
</part>
<part>
<Weight>3</Weight>
<unitWeights>KG</unitWeights>
</part>
<part>
<Weight>2</Weight>
<unitWeights>KG</unitWeights>
</part>
</Update>
</COLLECTION>

为此我申请了:

    <xsl:template match="Weight">
<weight>
<xsl:value-of select="translate(.,translate(., '0123456789', ''), '')"/>
</weight>
</xsl:template>
<xsl:template match="WeightUnits">
<unitWeights>KG</unitWeights>
</xsl:template>

请帮我找出我错的地方。

最佳答案

以下是满足您要求的通用解决方案。

  1. 只有“权重”的节点需要处理或应用模板。

    <xsl:template match="weight">
  2. 然后您需要按照此处所述应用translate 以仅提取字符串部分和数字部分。 XPath - extract numeric value out of string

为您演示:http://xsltransform.net/ejivdHb/23

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://locomotive/bypass/docx" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="weight">

<xsl:variable name="currentWeight" select="translate(.,translate(., '0123456789', ''), '')" />
<xsl:variable name="currentWeightUnit" select="translate(., '0123456789', '')" />

<xsl:if test="string-length($currentWeight) &gt; 0">
<Weight>
<xsl:value-of select="$currentWeight"/>
</Weight>
<xsl:if test="string-length($currentWeightUnit) &gt; 0">
<unitWeights>
<xsl:value-of select="$currentWeightUnit"/>
</unitWeights>
</xsl:if>
</xsl:if>
</xsl:template>

</xsl:stylesheet>

关于xml - 如何执行 XSL 从 xml 标签中删除文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40858525/

25 4 0