如何在XSLT 1.0中引用指定类型的XML复杂类型元素?
XSLT 1.0:提取指定type属性的ID元素并转换Supplier_Reference属性为子元素
我来帮你修正这个XSLT的问题,你需要精准筛选type="Supplier_ID"的ID元素,同时把Supplier_Reference的Descriptor属性转成Supplier_Name子元素,对吧?咱们一步步来调整你的代码:
原代码的问题点
<xsl:value-of select="ID"/>会默认选取第一个ID节点,无法筛选指定type的元素Supplier_Name的取值路径../Supplier_Reference/attribute::Descriptor冗余,当前上下文就是Supplier_Reference节点,直接访问属性即可- 多余添加了
Purchase_Order_ID元素,目标XML中不需要这个节点
修改后的完整XSLT代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <!-- 身份转换模板:默认复制所有节点和属性 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 专门处理Supplier_Reference节点的模板 --> <xsl:template match="Supplier_Reference"> <Supplier_Reference> <!-- 从当前节点的Descriptor属性生成Supplier_Name元素 --> <Supplier_Name> <xsl:value-of select="@Descriptor"/> </Supplier_Name> <!-- 筛选type为Supplier_ID的ID元素,取出其文本值 --> <Supplier_ID> <xsl:value-of select="ID[@type='Supplier_ID']"/> </Supplier_ID> </Supplier_Reference> </xsl:template> </xsl:stylesheet>
关键说明
- 筛选指定type的ID:使用谓词
ID[@type='Supplier_ID'],这是XSLT 1.0中根据属性值筛选节点的标准写法,能精准定位到你需要的ID元素 - 转换属性为子元素:在
Supplier_Reference节点的模板中,直接通过@Descriptor访问当前节点的属性值,生成新的Supplier_Name子元素 - 保留原有结构:身份转换模板确保除了
Supplier_Reference之外的所有节点都保持原样,只修改你需要调整的部分
运行这个XSLT后,就能生成你预期的目标XML结构。
内容的提问来源于stack exchange,提问作者Richard Croy
相关产品推荐
相关产品推荐

