xslt - XSLT 转换:将节点的内容移动到一个节点
问题描述
我有以下 XML:
<EAD:c>
<EAD:accessrestrict type="aaa">
<EAD:p>
value1
</EAD:p>
</EAD:accessrestrict>
<EAD:accessrestrict type="bbb">
<EAD:p>
value2
</EAD:p>
</EAD:accessrestrict>
</EAD:c>
有多个<EAD:c>
节点,并非所有节点都必须具有<EAD:accessrestrict type="aaa">
或<EAD:accessrestrict type="bbb">
转换后的结果应该是:
<EAD:c>
<EAD:accessrestrict>
<EAD:p>
value1; value2;
</EAD:p>
</EAD:accessrestrict>
</EAD:c>
我不知道该怎么做,非常感谢您的帮助!
解决方案
你可以这样做:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:EAD="http://www.somens.com"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<outputDoc>
<xsl:apply-templates/>
</outputDoc>
</xsl:template>
<xsl:template match="EAD:c">
<xsl:copy>
<EAD:accessrestrict>
<EAD:p>
<xsl:for-each select="EAD:accessrestrict/EAD:p">
<xsl:value-of select="normalize-space(.)"/>
<xsl:if test="position()!=last()"><xsl:text>; </xsl:text></xsl:if>
<xsl:if test="position()=last()"><xsl:text>;</xsl:text></xsl:if>
</xsl:for-each>
</EAD:p>
</EAD:accessrestrict>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
看到它在这里工作:https ://xsltfiddle.liberty-development.net/gVhDDz1
推荐阅读
- flutter - 在仍在收听新文档的同时对 firestore 查询进行分页
- angular - ngOnChanges 不适用于角度 CDK 组件门户实例
- nginx - Nginx。获取时如何设置自定义 500 错误页面:内部重定向时重写或内部重定向周期
- r - 遇到麻烦
- angular - Ngif属性Angular?
- filter - DirectShow 过滤器 DebugAssert 信息级别
- java - 找不到方法,黄瓜测试
- c++ - 检查双阈值
- php - 稳健地检测 PHP 字符串中的破折号
- reactjs - Material UI Range Slider:使拇指在其附近时捕捉到一个值