我有一个有点复杂的xml,在那里我正努力有条件地从xml中删除某些元素。
<hl7:message xmlns:hl7="http://wso2.org/hl7"><ORU_R01 xmlns="urn:hl7-org:v2xml">
<ORU_R01.PIDPD1NK1NTEPV1PV2ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>1</OBX.1>
<OBX.16>
<XCN.1>i_tsleo</XCN.1>
</OBX.16>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>2</OBX.1>
<OBX.2>FT</OBX.2>
<OBX.3>
<CE.3>PIT</CE.3>
</OBX.3>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<CTI/>
</ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>1</OBX.1>
<OBX.2>NM</OBX.2>
<OBX.16>
<XCN.1>i_tsleo</XCN.1>
</OBX.16>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>9</OBX.1>
<OBX.2>FT</OBX.2>
<OBX.3>
<CE.3>PIT</CE.3>
</OBX.3>
</OBX>
</ORU_R01.OBXNTE>
<CTI/>
</ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>8</OBX.1>
<OBX.2>FT</OBX.2>
<OBX.3>
<CE.3>PIT</CE.3>
</OBX.3>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<CTI/>
</ORU_R01.ORCOBRNTEOBXNTECTI>
</ORU_R01.PIDPD1NK1NTEPV1PV2ORCOBRNTEOBXNTECTI>
<DSC/>
有点长的XML。我想删除所有包含
ORU_R01.OBXNTE
的OBX/OBX.3/CE.3/
,使其成为PIT
。注意ORU_R01.OBXNTE
是文档中的一个重复元素。我尝试了一些身份转换的东西,但是没有运气。
最佳答案
试试这个:
输入XML:
<hl7:message xmlns:hl7="http://wso2.org/hl7">
<ORU_R01 xmlns="urn:hl7-org:v2xml">
<ORU_R01.PIDPD1NK1NTEPV1PV2ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>1</OBX.1>
<OBX.16>
<XCN.1>i_tsleo</XCN.1>
</OBX.16>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>2</OBX.1>
<OBX.2>FT</OBX.2>
<OBX.3>
<CE.3>PIT</CE.3>
</OBX.3>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<CTI/>
</ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>1</OBX.1>
<OBX.2>NM</OBX.2>
<OBX.16>
<XCN.1>i_tsleo</XCN.1>
</OBX.16>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>9</OBX.1>
<OBX.2>FT</OBX.2>
<OBX.3>
<CE.3>PIT</CE.3>
</OBX.3>
</OBX>
</ORU_R01.OBXNTE>
<CTI/>
</ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>8</OBX.1>
<OBX.2>FT</OBX.2>
<OBX.3>
<CE.3>PIT</CE.3>
</OBX.3>
</OBX>
<NTE/>
</ORU_R01.OBXNTE>
<CTI/>
</ORU_R01.ORCOBRNTEOBXNTECTI>
</ORU_R01.PIDPD1NK1NTEPV1PV2ORCOBRNTEOBXNTECTI>
<DSC/>
</ORU_R01>
</hl7:message>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="urn:hl7-org:v2xml">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="x:ORU_R01.OBXNTE[.//x:CE.3 = 'PIT']"/>
</xsl:stylesheet>
输出XML:
<?xml version="1.0" encoding="utf-8"?>
<hl7:message xmlns:hl7="http://wso2.org/hl7">
<ORU_R01 xmlns="urn:hl7-org:v2xml">
<ORU_R01.PIDPD1NK1NTEPV1PV2ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>1</OBX.1>
<OBX.16>
<XCN.1>i_tsleo</XCN.1>
</OBX.16>
</OBX>
<NTE />
</ORU_R01.OBXNTE>
<CTI />
</ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.OBXNTE>
<OBX>
<OBX.1>1</OBX.1>
<OBX.2>NM</OBX.2>
<OBX.16>
<XCN.1>i_tsleo</XCN.1>
</OBX.16>
</OBX>
<NTE />
</ORU_R01.OBXNTE>
<CTI />
</ORU_R01.ORCOBRNTEOBXNTECTI>
<ORU_R01.ORCOBRNTEOBXNTECTI>
<CTI />
</ORU_R01.ORCOBRNTEOBXNTECTI>
</ORU_R01.PIDPD1NK1NTEPV1PV2ORCOBRNTEOBXNTECTI>
<DSC />
</ORU_R01>
</hl7:message>
关于xml - 如何根据XML树中某些嵌套元素的特定值完全删除父元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52999696/