You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过XSLT获取XML元素属性值并映射到C#类字段?

问题原因

你当前取值为空是因为现有MapElement模板的逻辑是专为XML元素节点设计的,传入属性节点时会触发两个错误:

  1. 判断条件string-length($targetNode/text())>0不生效:属性节点没有子文本节点,text()永远返回空,直接跳过了元素生成逻辑
  2. 取值逻辑xsl:value-of select="$targetNode/text()"拿不到值:属性的值本身就是节点的字符串内容,不需要通过text()获取

修复方案

1. 修改通用MapElement模板

调整后的模板可以同时兼容元素节点和属性节点,无需修改其他调用逻辑:

<xsl:template name="MapElement">
    <xsl:param name="targetNode" />
    <xsl:param name="elementName" />
    <!-- 直接判断节点本身的字符串长度,兼容元素、属性两种节点类型 -->
    <xsl:if test="$targetNode and string-length($targetNode)>0">
      <xsl:element name="{$elementName}" >
        <!-- 直接取节点的字符串值:元素节点自动取文本内容,属性节点自动取属性值 -->
        <xsl:value-of select="$targetNode"/>
      </xsl:element>
    </xsl:if>
 </xsl:template>

2. 检查现有调用配置

你当前获取属性的路径select="ws:Additional_Information/ws:User_Name/@ws:PriorValue"写法是正确的,无需修改,只需注意两个细节即可:

  • 确保XSLT文件头部已经正确声明了ws命名空间,和XML文件的命名空间配置保持一致
  • 你给出的示例XML中ws:Additional_Information闭合标签缺失,实际使用时需要补全否则会解析失败
  • 你的映射代码中<AdditionaInformation>标签拼写错误(少了字母l),修正为<AdditionalInformation>避免和C#类字段不匹配

内容的提问来源于stack exchange,提问作者NevrMore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:27:03