xml - 使用 xslt 将兄弟节点设置为 xml 中的父节点
问题描述
我需要使用 xslt 将以下输入 xml 转换为所需的输出格式,如下所示,如何使用 xslt 将 <BTAT_MEASUREMENTSet> 设置为所需输出的父级?,它总是在消息的第二级之后根,因此与根的相对位置是恒定的
**Input:**
<?xml version="1.0" encoding="UTF-8"?>
<SyncBTAT_MEASUREMENT
xmlns="http://www.llll.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDateTime="2021-03-24T15:39:55+00:00" transLanguage="EN" baseLanguage="EN" messageID="176416166003958143562">
<BTAT_MEASUREMENTSet></BTAT_MEASUREMENTSet>
<MEASUREPOINT action="AddChange">
<BTATMBO>MEASUREMENT</BTATMBO>
<ORGID>TAL3-DE</ORGID>
<POINTNUM>TEMP</POINTNUM>
<SITEID>TAL3</SITEID>
<MEASUREMENT>
<ASSETNUM>2403871\PPC</ASSETNUM>
<MEASUREDATE>2020-06-16T06:47:07+00:00</MEASUREDATE>
<MEASUREMENTID/>
<MEASUREMENTVALUE>20.0</MEASUREMENTVALUE>
<METERNAME>TIME-MIN-001</METERNAME>
</MEASUREMENT>
</MEASUREPOINT>
</SyncBTAT_MEASUREMENT>
**Needed Output:**
<?xml version="1.0" encoding="UTF-8"?>
<SyncBTAT_MEASUREMENT
xmlns="http://www.llll.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDateTime="2021-03-24T15:39:55+00:00" transLanguage="EN" baseLanguage="EN" messageID="176416166003958143562">
<BTAT_MEASUREMENTSet>
<MEASUREPOINT action="AddChange">
<BTATMBO>MEASUREMENT</BTATMBO>
<ORGID>TAL3-DE</ORGID>
<POINTNUM>TEMP</POINTNUM>
<SITEID>TAL3</SITEID>
<MEASUREMENT>
<ASSETNUM>2403871\PPC</ASSETNUM>
<MEASUREDATE>2020-06-16T06:47:07+00:00</MEASUREDATE>
<MEASUREMENTID/>
<MEASUREMENTVALUE>20.0</MEASUREMENTVALUE>
<METERNAME>TIME-MIN-001</METERNAME>
</MEASUREMENT>
</MEASUREPOINT>
</BTAT_MEASUREMENTSet>
</SyncBTAT_MEASUREMENT>
解决方案
如果您知道要成为父元素的元素的名称以 开头BTAT_
,并且它没有名称也以 开头的兄弟元素BTAT_
,那么您可以这样做:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="*[starts-with(local-name(), 'BTAT')]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="../* except self::*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是假设您不知道输入 XML 中任何元素的名称,包括。根元素 - 否则它可能更简单。
推荐阅读
- python-3.x - 如何在 Python 中将 h5 文件转换为 GIF
- c# - 如何知道当前的键盘是不是美国国际键盘?
- python - 在 Python 中加速斯坦福依赖解析
- azure - 修改/更换探针导致 CannotModifyRuleUsedByProbeUsedByVMSS
- azure - 创建 QnA 聊天机器人 Azure 时部署失败
- linux - 构建带有用于测试数据的卷的docker镜像(centos)(postgresql)
- python - POST 后反转 (NoReverseMatch)
- scala - 无法在 IntelliJ 中导入 spark mllib
- macos - 204 状态代码不适用于带有 HTTP 2.0 的 Safari 11.1
- javascript - 从浏览器下载图像 GDrive API