首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSLT从元素转换为属性格式

XSLT从元素转换为属性格式
EN

Stack Overflow用户
提问于 2018-03-22 03:06:20
回答 1查看 44关注 0票数 2

更改此XML的XSLT是什么?

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<cas:ADDRESS_DETAILS PRIMARY_ADDRESS_INDICATOR="1" ADDRESS_ID="-289495914026885120" ADDRESS_TYPE="45001" ADDRESS_ACTIVE_FROM_DATE="2006-12-23" PERSON_ID="14512823342202880">
   <cas:ADDRESS_ELEMENT VALUE="McMurchy Avenue" TYPE="ADD2" />
   <cas:ADDRESS_ELEMENT VALUE="ON" TYPE="PROV" />
   <cas:ADDRESS_ELEMENT VALUE="CA" TYPE="COUNTRY" />
   <cas:ADDRESS_ELEMENT VALUE="Brampton" TYPE="CITY" />
   <cas:ADDRESS_ELEMENT VALUE="440" TYPE="ADD1" />
</cas:ADDRESS_DETAILS>

转换为此格式

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<cas:ADDRESS_DETAILS PRIMARY_ADDRESS_INDICATOR="1" ADDRESS_ID="-289495914026885120" ADDRESS_TYPE="45001" ADDRESS_ACTIVE_FROM_DATE="2006-12-23" PERSON_ID="14512823342202880" ADD2 ="McMurchy" PROV="ON" COUNTRY="CA" CITY="Brampton" ADD1="440">
</cas:ADDRESS_DETAILS>
EN

回答 1

Stack Overflow用户

发布于 2018-03-22 03:26:12

假设您想要合并父级中的所有ADDRESS_ELEMENT,您可以使用

代码语言:javascript
运行
复制
  <xsl:template match="ADDRESS_ELEMENT[1]">
      <xsl:copy>
          <xsl:apply-templates select="../ADDRESS_ELEMENT" mode="to-attribute"/>
      </xsl:copy>
  </xsl:template>

  <xsl:template match="ADDRESS_ELEMENT[position() > 1]"/>

  <xsl:template match="ADDRESS_ELEMENT" mode="to-attribute">
      <xsl:attribute name="{@TYPE}" select="@VALUE"/>
  </xsl:template>

加上处理其余部分的标识转换(即XSLT3 (https://xsltfiddle.liberty-development.net/6qM2e2q)中的<xsl:mode on-no-match="shallow-copy"/>或早期版本中的相应模板)

如果您希望将子元素转换为父元素的属性,如您的编辑所示,可以简化代码。但是,使用名称空间需要进行一些调整:

代码语言:javascript
运行
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xpath-default-namespace="http://example.com/cas"
    version="3.0">

  <xsl:strip-space elements="*"/>
  <xsl:output indent="yes"/>

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="ADDRESS_DETAILS">
      <xsl:copy>
          <xsl:apply-templates select="@*, ADDRESS_ELEMENT"/>
      </xsl:copy>
  </xsl:template>

  <xsl:template match="ADDRESS_ELEMENT">
      <xsl:attribute name="{@TYPE}" select="@VALUE"/>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/6qM2e2q/2

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49414704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档