XML数据导入问题:XSLT配置错误导致指定节点数据无法获取
修正XSLT以提取父节点ID及子节点参数
核心修正方向
针对你无法获取uid_ungeteiltepos、p节点内容和bl节点值的问题,核心是确保XSLT的节点/属性选择路径正确,同时正确引用父节点的属性值。以下是基于常见XML结构的修正方案,你可根据实际XML结构调整。
假设原始XML结构(请替换为你的实际结构)
<root> <position uid_ungeteiltepos="POS-001"> <content> <p>产品描述1</p> <bl>BATCH-001</bl> </content> <content> <p>产品描述2</p> <bl>BATCH-002</bl> </content> </position> <position uid_ungeteiltepos="POS-002"> <content> <p>产品描述3</p> <bl>BATCH-003</bl> </content> </position> </root>
修正后的XSLT配置
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 匹配根节点,生成输出结构 --> <xsl:template match="/"> <extracted_data> <!-- 遍历所有目标父节点 --> <xsl:for-each select="root/position"> <!-- 缓存父节点的uid_ungeteiltepos属性 --> <xsl:variable name="parent_uid" select="@uid_ungeteiltepos"/> <!-- 遍历父节点下的子节点 --> <xsl:for-each select="content"> <item> <!-- 输出父节点ID --> <uid_ungeteiltepos><xsl:value-of select="$parent_uid"/></uid_ungeteiltepos> <!-- 输出p节点文本内容 --> <p_text><xsl:value-of select="p"/></p_text> <!-- 输出bl节点值 --> <bl_value><xsl:value-of select="bl"/></bl_value> </item> </xsl:for-each> </xsl:for-each> </extracted_data> </xsl:template> </xsl:stylesheet>
关键修正点说明
- 属性与节点选择语法:
- 父节点的属性
uid_ungeteiltepos用@uid_ungeteiltepos选择(@符号表示属性) - 子节点
p和bl直接用节点名选择,确保路径是当前上下文节点的子节点
- 父节点的属性
- 变量缓存父节点属性:用
<xsl:variable>保存父节点ID,避免遍历子节点时重复查找父节点,提升效率同时避免路径错误 - 路径匹配准确性:确保
select中的节点路径和你的实际XML结构完全一致,比如父节点、子节点名称不同时要对应修改
预期输出XML
<extracted_data> <item> <uid_ungeteiltepos>POS-001</uid_ungeteiltepos> <p_text>产品描述1</p_text> <bl_value>BATCH-001</bl_value> </item> <item> <uid_ungeteiltepos>POS-001</uid_ungeteiltepos> <p_text>产品描述2</p_text> <bl_value>BATCH-002</bl_value> </item> <item> <uid_ungeteiltepos>POS-002</uid_ungeteiltepos> <p_text>产品描述3</p_text> <bl_value>BATCH-003</bl_value> </item> </extracted_data>
额外注意事项
- 如果你的XML包含命名空间,需在XSLT的
<xsl:stylesheet>标签中声明对应命名空间前缀,并在select路径中使用该前缀 - 如果
bl是属性而非子节点,将select="bl"改为select="@bl" - VBA调用时,确保XML和XSLT文件编码一致,且加载路径正确
内容的提问来源于stack exchange,提问作者Kitchendream
相关产品推荐
相关产品推荐

