Как полностью удалить родительский элемент на основе определенного значения некоторого вложенного элемента в дереве XML? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть немного сложный 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 является повторяющимся элементом в документе.Я пробовал несколько вещей с преобразованием идентичности, но не повезло.

1 Ответ

0 голосов
/ 26 октября 2018

Попробуйте это: Входной 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...